• reduex之全局数据如何管理


    模块化目录结构

    action  属于Reduex, 是把数据从应用传到 store 的有效载荷。它是 store 数据的唯一来源。一般来说你会通过 store.dispatch() 将 action 传到 store。

     Connect

    https://www.jianshu.com/p/ad7eddb23d66

    connect属于react-redux

    import {connect} from 'react-redux'
    import Counter from '../component/count'
    
    
    //将state绑定到props的counter
    const mapStateToProps = (state)=> {
        console.log(state);
        return {
            counter: state
        }
    };
    //将action的所有方法绑定到props上
    const mapDispatchToProps = (dispatch) => {
        return {
            onAdd: ()=> {
                dispatch({type: "INCREMENT_COUNTER"});
            },
            onCut: ()=> {
                dispatch({type: "DECREMENT_COUNTER"});
            }
        };
    };
    
    //通过react-redux提供的connect方法将我们需要的state中的数据和actions中的方法绑定到props上
    
    export default connect(mapStateToProps, mapDispatchToProps)(Counter)

     actionCreators.js

    import * as constants from './constants';
    
    export const handleChange = (action) => ({
        type: constants.CHANGE_NUM,
      num:action.num,
      index:action.index
    })

    constants.js

    export const CHANGE_NUM = 'car/CAR_CHANGE_NUM';

    store/index.js

    import reducer from './reducer';
    import * as actionCreators from './actionCreators';
    import * as constants from './constants';
    
    export {reducer,actionCreators,constants}

    reducer.js

    import * as constants from './constants';
    import { fromJS } from 'immutable';
    const defaultState = fromJS({
      goodslist:[
        { id:1,
          num:1,
          name: '范范木门01测试-卢',
          text: '"A款橡木","A款橡木","A款橡木"',
          monery: 100,
          url:'https://fc6b2827-b381-4383-9079-fa34f41768e3'
        }
      ]
    });
    const changeGoodsNum=(state, action) => {
      console.log(action)
      // return state.merge(`goodslist[${action.index}]`, action.num);
      // state.set('showScroll', goodslist);
      
    };
    
    export default (state = defaultState, action) => {
      switch (action.type) {
          case constants.CHANGE_NUM: {
            // console.log(state.toJS())
            const {goodslist } = state.toJS();
            console.log(goodslist)
    
            goodslist[action.index].num = action.num>0?action.num:1;
            state.set('goodslist',  fromJS(goodslist));
            console.log(goodslist)
            return state.set('goodslist', fromJS(goodslist))
          }
        // case constants.CHANGE_NUM:
          // return changeGoodsNum(state, action);
        default:
          return state;
      }
    }

    immutable在redux中的应用

    https://www.jianshu.com/p/3e162080711b

    https://www.cnblogs.com/greatluoluo/p/8469224.html

    https://www.jianshu.com/p/5718c917d701

    https://github.com/immutable-js/immutable-js

    https://www.cnblogs.com/PrayLs/p/10506886.html

    1、什么是Immutable?

    Immutable是一旦创建,就不能被更改的数据。对Immutable对象的任何修改或添加删除操作都会返回一个新的Immutable对象。Immutable实现的原理是Persistent Data Structure(持久化数据结构),也就是是永久数据创建新数据时,要保证旧数据同时可用且不变。同时为了避免deepCopy把所有节点都复制一遍带来的性能损耗,Immutable使用了Structural Sharing(结构共享),即如果对象树结点发生变化,只修改这个结点和受它影响的父节点,其他结点进行共享。

    const mapState = (state) => ({
      goodslist: state.getIn(['cars', 'goodslist'])
    }); //getIn(['cars', 'goodslist'])
    const mapDispatch = (dispatch) => ({ handleChange(index,e) { console.log(index,'index') console.log(e.target.value,'num') dispatch(actionCreators.handleChange({ index:index, num:e.target.value })) }, }); export default connect(mapState, mapDispatch)(Car);

  • 相关阅读:
    shell脚本:/bin/sh^M: bad interpreter: No such file or directory。(转)
    Buffer在JDK中的基本说明

    清除版本控制信息针对 SVN
    修改——对密码进行加密
    省市加载javascript
    visual studio 2010 中 javascript 提示文本
    折腾自己的博客样式,自适应两列布局
    给动态加载的图片添加延迟加载(附在线demo)
    44种IE css bug实例测试总结(转载)
  • 原文地址:https://www.cnblogs.com/dianzan/p/12227307.html
Copyright © 2020-2023  润新知