immutable和redux-immutable的使用

1. 安装

npm install immutable
npm install redux-immutable --save 

2. 生成immutable对象,获取对象属性,并修改对象属性

下面单独这一部分,使用react-derux来为Provider的子组件提供state。
--------开始--------
在具体的app.js文件中,使用connect方法,来获得state。当然在这个app外部需要调用Provider组件。

import { Provider } from 'react-redux';
// 省略了部分代码
<Provider store={store}>
	<App></App>
</Provider>

在reducer.js,调用redux-immutablecombineReducers,来代替reduxcombineReducers,生成immutable对象。

import { combineReducers } from "redux-immutable";
import { reducer as reducer_header } from "../header/store";

export default combineReducers({
    header: reducer_header
})

这样看来在一开始构建整个项目目录时,需要一个store.js来引入redux中间件(devTools,thunk,saga),为Provider提供一个包含redux中间件的store。然后你还需要一个reducer.js方便子组件使用store,这个reducer的返回对象需要使用redux-immutable的combineReducers方法。当然如果你没使用immutable,使用redux也可以。
--------结束--------
reducer.js中,调用immutablefromJS,生成immutable对象。
需要注意的是,只有经过fromJS方法调用过后的state,才具有setmergeget等方法。

// reducer_header
import * as actionType from './actionType.js';
import { fromJS } from 'immutable';

let defaultState = fromJS({
    searchFocus: false,
    searchInfoMouseIn: false,
    searchList: [],
    searchListCurPage: 0,
    searchListTotalPage: 0,
});

export const reducer =  ((state=defaultState, action) => {
    switch(action.type){
        case actionType.ChangeSearchFocus:
        	// 将state深拷贝一份后,调用set方法修改'searchFocus'为action.value
            return state.set('searchFocus', action.value);
        case actionType.ChangeSearchList:
            return state.merge({
                searchList: action.value,
                searchListTotalPage: action.searchListTotalPage
            });
            // return state.set('searchList', action.value)
            //             .set('searchListTotalPage', action.searchListTotalPage);
        default:
            return state
    }
});
import { connect } from 'react-redux';
// 省略了部分代码
const mapState = (state) => {
    return {
        searchFocus: state.header.get('searchFocus'),
    }
};
export default connect(mapState, mapDispatch)(App)

3. 将immutable对象转换为js对象

const imm = fromJS({wk: 'WK'});
// im:  Map {size: 1, _root: ArrayMapNode, __ownerID: undefined, __hash: undefined, __altered: false}
console.info('im: ', imm);
// js:  {wk: "WK"}
console.info('js: ', imm.toJS());

4.为immutable对象concat值

let imm = fromJS({wk: ['w', 'k']});
// js:  (2) ["w", "k"]
console.info('js: ', imm.get('wk').toJS());
imm = imm.set('wk', imm.get('wk').concat(['W', 'K']));
// js:  (4) ["w", "k", "W", "K"]
console.info('js: ', imm.get('wk').toJS());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值