老莫的笔记本  
  
查看: 782|回复: 1

React 中 redux 的第一个例子

[复制链接]

662

主题

878

帖子

5133

积分

超级版主

Rank: 8Rank: 8

积分
5133
发表于 2020-9-5 15:58:49 | 显示全部楼层 |阅读模式
  1. redux 正常使用
  2.                
  3.                         其实推荐了一个 chrome 拓展程序 [其中虽然store 被改变 ,但是 斌没有对其文件有任何操作]
  4.                   
  5.                         1. 通过 dispatch(action) 向 store 传递  一个action 的json 字符串
  6.                         2. store 会在reducer 中  处理接收 这个action
  7.                         3. redecer 处理完的newState 返回给 store
  8.                         4. 模块订阅监听 store 的变化  并给出一个处理的 function
  9.                         5. 在处理的 function 中 进行对该模块的操作 ,大部分是直接this.setState( store.getState() )
复制代码
上代码:
模块:
  1. import React , { Fragment, Component }from 'react';
  2. import Mitem from './Mitem';
  3. // 第三步 引入 仓库
  4. import store from '../store/Store';

  5. class Mydo extends Component{

  6.     // 构造函数
  7.     constructor(props)
  8.     {
  9.         super(props);

  10.         // 第四步 获取仓库的内容 利用 store.getState方法
  11.         // console.log(  store.getState() );
  12.         this.state =store.getState();
  13.         console.log(this.state.inpValue)

  14.         this.lmStoreChange = this.lmStoreChange.bind(this);
  15.         // 此处加个监听订阅
  16.         store.subscribe(this.lmStoreChange);
  17.     }

  18.     lmStoreChange(){
  19.         console.log(store.getState());
  20.         // 这里其实还缺少一个对list 的操作,但是我不想管
  21.         this.setState(store.getState())
  22.     }

  23.     // 监听input改变
  24.     inpC(e){
  25.         // this.setState({
  26.         //     inpValue:e.target.value
  27.         // })
  28.         // console.log(e.target.value)

  29.         let action = {
  30.             type :'chang_inp_value',
  31.             value:e.target.value
  32.         }
  33.         // 传给数据处理中心中心 利用 dispatch 方法
  34.         store.dispatch(action);
  35.         
  36.     }
  37. ………………
复制代码


继续代码 reducer
  1. // 这是一个处理器 用来 对 store  进行对应的操作;
  2. //  这个defaulState 只是一个测试的值 其实只要返回下面的就可以
  3. const defaultState ={
  4.     t:[],
  5.     lm:111,
  6.     inpValue : '123',
  7.     arr:[]
  8. };
  9.                
  10. export default ( state=defaultState, action )=>{

  11.     if(action.type == 'chang_inp_value')
  12.     {
  13.         // 这个步骤,视频里 说是拷贝,对json 的 解析 属于脱裤子放屁的 “深拷贝”
  14.         let newState = JSON.parse(JSON.stringify(state));
  15.         newState.inpValue = action.value;
  16.         // 这里的return 其实是修改掉落 newState 的值  ,在模块中设定了监听函数 store.subscribe(this.lmStoreChange); 就可以实时进行更新
  17.         return newState;
  18.     }

  19.     return state;
  20. };
复制代码

回复

使用道具 举报

662

主题

878

帖子

5133

积分

超级版主

Rank: 8Rank: 8

积分
5133
 楼主| 发表于 2020-9-6 16:10:32 | 显示全部楼层
store 是唯一的
store 只能自己改变自己的内容
Reducer 必须是一个纯函数[给固定的参数 就会给固定的输出,且不能有任何的副作用(副作用类似对相关参数进行的修改) ] ;也就是不能放日期,不能放ajax
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表