IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> react-redux中使用Hook和类组件写法进行状态管理 -> 正文阅读

[JavaScript知识库]react-redux中使用Hook和类组件写法进行状态管理

?

?一、介绍

React-ReduxRedux的官方React绑定库。它能够使你的React组件从Redux store中读取数据,并且向store分发actions以更新数据

二、项目搭建

1.react项目搭建? ?npx create-react-app app

2.安装redux? ??npm i redux

3.安装 react-redux? npm i react-redux

三、项目使用

①React-Redux 提供<Provider/>组件,能够使你的整个app访问到Redux store中的数据:

src/index.js

import React from "react";
import { createRoot } from 'react-dom/client'
import App from './App.jsx'
// 引入
import store from './store'
// 引入 react-redux
import { Provider } from 'react-redux'
const root = createRoot(document.getElementById('root'))
root.render(
  <Provider store={store}>
    <App />
  </Provider>
  
)

src/store/index.js

import { createStore, combineReducers } from 'redux'

import{ num,books} from './reducer.js'

// 合并
const rootReducer = combineReducers({books,num})
const  store = createStore(rootReducer)
export default store

src/store/reducer.js

import {NUM_ADD,NUM_REDUCE,BOOKS_ADD} from './reducer-types'
export function num(state = 0, action) {
    console.log('action', action);
    switch (action.type) {
        case NUM_ADD:
            return state + action.payload
        case NUM_REDUCE:
            return state - action.payload
        default:
            return state
    }
}
export function books(state = ['redux', 'react-redux'], action) {
    switch (action.type) {
        case BOOKS_ADD:
            return [action.payload, ...state]
        default:
            return state
    }
}

src/store/reducer-types.js

export const NUM_ADD = '/num/add'
export const NUM_REDUCE='/num/reduce'
export const BOOKS_ADD = '/books/add'

②在类组件中使用

src/App.jsx

import React from "react";
import { connect } from 'react-redux'
import Hook from "./Hook";
import {NUM_ADD,NUM_REDUCE,BOOKS_ADD} from './store/reducer-types'
class App extends React.Component {
    handlerAdd = () => {
        this.props.subCount()
    }
    handlerReduce = () => {
        this.props.divideCount(1)
    }
    render() {
        let {num,books,addBooks} = this.props
        return (
            <>
                <h1>app组件(类组件)--- num:{num}</h1>
                <button onClick={this.handlerAdd}>点击派发事件num+10</button>
                <button onClick={this.handlerReduce}>点击派发事件num-1</button>
                <ul>
                    {books.map((item,index)=>(<li key={index}>{item}</li>))}
                </ul>
                <button onClick={()=>{addBooks('vue')}}>点击追加</button>
                <Hook></Hook>
            </>
        )
    }
}
// state 仓库数据
// props 父亲传递过来的数据
const mapStateToProps = (state, props) => ({...state,...props })
// 方法
const mapDispatchToProps = dispatch => (
    {
        subCount: () => dispatch({ type: NUM_ADD, payload: 10 }),
        divideCount: (payload) => dispatch({ type: NUM_REDUCE, payload }),
        addBooks: (payload) => dispatch({ type: BOOKS_ADD, payload })
    }
)
// 位置不能颠倒
export default connect( mapStateToProps,mapDispatchToProps)(App)

③在Hook中使用

import{ useSelector,useDispatch } from 'react-redux'
import {BOOKS_ADD,NUM_ADD} from './store/reducer-types'
function Hook(){
    // 获取
    let num = useSelector(({num})=>num)
    let books = useSelector((state)=>state.books)
    let dispatch = useDispatch()
    let bookeredux = ()=>{
        dispatch({type:BOOKS_ADD,payload:'node'})
    }
    return(
        <>
        <h1>Hook组件---num:{num}</h1>
        <button onClick={()=>dispatch({type:NUM_ADD,payload:1})}>点击派发事件num+1</button>
        <ul>
            {books.map((item,index)=>(<li key={index}>{item}</li>))}
        </ul>
            <button onClick={bookeredux}>点击追加</button>
        </>
    )
}
export default Hook

四、效果图

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:13:49  更:2022-07-17 16:15:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:42:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码