immer和react-immer

1.'immer'的使用目的是:获得不可变的reducer,即一个深拷贝后又修改的全新的state;

2.使用:

reducer/index.tsx:

import produce from 'immer';

import {combineReducers} from 'redux-immer';

let reducers:ReducersMapObject<CombinedState,AnyAction>={

    home,

};

let rootReducer:Reducer<CombinedState,any>=combineReducers<CombinedState>(produce,reducers);

home.tsx:

reducer里部分代码:

case types.SET_LESSONS:

            state.lessons.loading=false;

            state.lessons.hasMore=action.payload.hasMore;

            state.lessons.offset=state.lessons.offset+action.payload.list.length;

            state.lessons.list=[...state.lessons.list,...action.payload.list];

            return state;//这个state不是原来的state,是经过produce 深拷贝之后的state;

3.源码是:

const baseState=[{

    todo:'lean',

    done:true,

}];

function produce(baseState:any,cb:any){

      let draftState=JSON.parse(JSON.stringify(baseState));

      return cb(draftState);

}

const nextState=produce(baseState,(draftState:any)=>{

    draftState.push({todo:'about',done:true});

    return draftState;

});

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容