防止在reducer中修改state
facebook提供了immutable库
immutable对象是不可改变的
用法:
npm install immutable
reducer中如下用
const { fromJS } = require(‘immutable’);
const defaultState= fromJS({//转化程immutable对象
focused:false
})
export default (state=defaultState,action) => {
if(action.type== actionType.CHANGE_INPUT_FOCUSE){
//拷贝一份之前state里面的数据–深拷贝
// const newState=JSON.parse(JSON.stringify(state))
// newState.focused=action.value
// return newState;
return state.set(‘focused’,action.value) //i返回immutable对象,mmutable对象的set方法,会根据之前immutable的值和设置的值,返回一个全新的对象,并不会改之前的数据
}
return state
}
组件中调用的时候
不能直接state.header.focused
要state.header.get(‘focused’)
redux-immutable
npm install redux-immutable
把import {combineReducers} from ‘redux’ //可以将小的reducer合并在一起
改成 import {combineReducers} from ‘redux-immutable’
state.get(‘header’).get(‘focused’) //state也被转化为immutable对象
等同于state.getIn([‘header’,‘focused’])