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);

posted @ 2020-01-21 23:01  ThisCall  阅读(457)  评论(0编辑  收藏  举报