Redux

作者: 废弃的种子 | 来源:发表于2021-04-26 10:05 被阅读0次

    创建仓库

    1、在src 新建store文件夹,在store下新建一个仓库index.js和管理员reducer.js


    image.png

    2、index.js

    import {createStore} from 'redux' //引入redux的方法
    import reducer from './reducer'  //引入管理员
    const store = createStore(reducer)          // 创建数据存储仓库
    export default store                 //把仓库暴露出去
    

    动态修改仓库数据

    3、某一组件中
    获取仓库数据

    this.state = store.getState();
    

    修改仓库数据

      // 值变化时,修改仓库的值
      changeFn(e) {
        const action = {
          type: "changeInput",
          value: e.target.value,
        }; //第一个是对Action的描述,第二个是要改变的值。
        store.dispatch(action); //通知仓库管理员
      }
    

    4、reducer.js
    ** Reducer里只能接收state,不能改变state。最后返回新的仓库数据;Reducer必须是纯函数 **

    const defaultState = {
      inputValue: "Write Something",
      data: ["早上4点起床,锻炼身体", "中午下班游泳一小时"],
    }; //默认数据
    export default (state = defaultState, action) => {
       /*
       state:指的是原始仓库里的状态。
       action:指的是action新传递的状态。
       */
      if (action.type === "changeInput") {
        let newState = JSON.parse(JSON.stringify(state)); //深度拷贝state
        newState.inputValue = action.value;
        return newState;
      }
      
      return state;
    };
    
    

    此时store里的数据已经更新
    5、更新某一组件

      this.storeChange = this.storeChange.bind(this)  //转变this指向
      store.subscribe(this.storeChange) //订阅Redux的状态
    

    再次获取仓库数据赋值给当前的state,以达到更新组件

    storeChange(){
         this.setState(store.getState())
     }
    

    6、组件中的增加方法

     addListFn() {
        const action = { type: "addItem" };
        store.dispatch(action);
      }
    

    reducer.js接收

      //增加
      if (action.type === "addItem") {
        //根据type值,编写业务逻辑
        let newState = JSON.parse(JSON.stringify(state));
        newState.data.push(newState.inputValue); //push新的内容到列表中去
        newState.inputValue = "";
        return newState;
      }
    

    7、然后继续调用第 "5" 步骤,刷新组件

    Redux实际开发中的小技巧

    1、把Action Type单独拆分出一个文件。在src/store文件夹下面,新建立一个actionTypes.js文件,然后把Type集中放到文件中进行管理。

    export const  CHANGE_INPUT = 'changeInput'
    export const  ADD_ITEM = 'addItem'
    export const  DELETE_ITEM = 'deleteItem'
    

    写好了ationType.js文件,可以引入到TodoList.js组件当中,引入代码如下:

    import { CHANGE_INPUT , ADD_ITEM , DELETE_ITEM } from './store/actionTypes'
    ``
    2、公共的Acion方法

    相关文章

      网友评论

          本文标题:Redux

          本文链接:https://www.haomeiwen.com/subject/zlqjrltx.html