immutable是用来避免开发者直接修改state的库。
我们首先要将state对象变为immutable对象。使用fromJS方法。
import { fromJS } from 'immutable'
//使用immutable对象,是state数据不可变,是防止我们直接修改state数据的一个库
const defaultState = fromJS({
fouced:false,
list:[]
});
当我们的state的对象变为immutable对象后,我们修改state是就不能想之前那样,我们需要调用immutable库中提供的set()方法,
export default (state = defaultState,action) => {
if(action.type === actionTypes.CHANGE_FOCUSED) {
return state.set('fouced', true)
//原本是返回一个新的对象。现在把它变为immutable对象后,需要使用set方法,它会自动返回一个新的对象
// {
// fouced:true
// }
}
而我们在mapStateToProps时获取到的state数据,也不能直接获取,我们需要使用immutable库提供的get()方法
const initMapStateToProps = (state) => {
return {
//原本是直接获取到fouced,现在变为immutable对象后,需要使用get方法才能获取到fouced属性(1)
// 当使用了redux-immutable获取combineReducers后,state就变成immutable对象,所以header也要使用get方法获取(2)
fouced:state.get('header').get('fouced'),//(2)
list:state.get('header').get('list')
//1.fouced:state.header.fouced => fouced:state.header.get('fouced')(1)
}
};