react redux 大体架构的搭建

  1. 下载
  • npm install --save redux 或者 yarn add redux :安装 redux
  • npm install --save react-redux 或者 yarn add react-redux React 绑定库和开发者工具(Reducer优化)
  • 内容仅供参考,本文涉及到的 变量常量方法等只做参考,需要你自己定义
  1. 创建目录

在这里插入图片描述

  1. 书写仓库
//store/index.js
import { createStore } from 'redux';
import reducer from "./reducer"
const store = createStore(reducer);
export default store
  1. 书写action
//store/actionCreators.js
import store from "../store"
import {ADD_NEW_TODO,CHANGE_NEW_TODO,DELETE_NEW_TODO} from "./actionType"   //引入常量 //下一步创建
export default {
    addNewTodo(title){ //actionCreators
        let action = {
            type:ADD_NEW_TODO,  //传递的类型,用于判断
            title
        }
        //需要将action派发给reducer进行处理
        store.dispatch(action)
    },
    。。。。。。
 }
  1. 书写判断使用到的 常量
//store/actionType.js
const ADD_NEW_TODO  = "ADD_NEW_TODO"
const CHANGE_NEW_TODO  = "CHANGE_NEW_TODO"
const DELETE_NEW_TODO = "DELETE_NEW_TODO"
export {
    ADD_NEW_TODO,
    CHANGE_NEW_TODO,
    DELETE_NEW_TODO
}
  1. 书写管理数据的函数 reducer
//store/reducer.js
import {ADD_NEW_TODO,CHANGE_NEW_TODO,DELETE_NEW_TODO} from "./actionType"
let state = {  //定义默认值
    todos:[
        {
            id:1,
            title:"今天周一",
            isFinished:false
        },
		... ...
    ]
}

//需要定义成一个纯函数
const reducer = (prevState = state,action)=>{
    let newState = {...prevState}
    switch(action.type){
        case ADD_NEW_TODO:  //根据类型判断传递过来的参数
            newState.todos = newState.todos.slice()   //因为是添加,所以要额外的给一个新的存储在堆里的数据,
                                                      //要不然改的就是原本的数据,这样会导致数据虽然渲染了,但是项目并不会检测到数据变化
                                                      //如果是删除等则不需要添加此项
            newState.todos.push({id:handler.getId(newState.todos),title:action.title,isFinished:false})
            break;
			... ...
        default :
            break;
    }
    return newState
}


const handler = {
    getId(todos){
        todos = todos.slice()  //将新的数据传递过去
        if(todos.length ===0) return 1
        return todos.sort((a,b)=>{
            return b.id - a.id
        })[0].id + 1
    },
    ... ...
}

export default  reducer
  1. 将store 的数据传递给组件

src下的index.js

import store from './store'   //引入 store
import {Provider} from 'react-redux'   //引入 react-redux
ReactDOM.render(
  <Provider store = {store}>   //传递 store
    <App />
    </Provider>,
  document.getElementById('root')
);

  1. 获取数据 及 actionCreators 里的 action(第4步) 方法

在你的子组件中

import actionCreators from "../../store/todoList/actionCreators"  //引入 
import { connect } from 'react-redux'  //引入 connect()
const mapStateToProps = state =>({
    todos:state.todoList.todos   //你的 state 数据长什么样子就 state.xxx
})
const mapDispatchToProps = actionCreators;  //actionCreators 创建 action 事件的那个js文件
export default connect(mapStateToProps,mapDispatchToProps)(TodoContent)  //TodoContent子组件名称
  • mapStateToProps 可以让UI组件通过属性获取到redux管理的状态(store 数据)
  • mapDispatchToProps可以让ui组件通过属性获取到更改redux状态的方法(action 方法)
  1. 同一个组件中使用 得到的数据和方法

数据:

    render() {
        return (
            <ul>
                {
                  this.props.todos.map(item=>{   //使用 store 数据 ⬅⬅⬅⬅⬅
                    return <LiItem key={item.id} item={item}/>
                })
                }
            </ul>
        )
    }

方法:

    const deleteTodo = ()=>{  //点击某处触发的函数(无关)
        this.props.deleteNewTodo(props.item.id)    //使用 传递过来 action 的方法
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值