Atualizando seu aplicativo Redux para usar ImmutableJS

Podemos usar immutable-js de várias maneiras com Redux. Depende se queremos que nosso estado raiz seja imutável ou não.

Se escolhermos o modo Difícil, podemos ter alguns problemas com libs, como redux-formno futuro (porém solucionáveis).

Há um problema discutindo se precisamos da maneira mais difícil: https://github.com/gajus/redux-immutable/issues/32 .

Maneira simples

  1. npm install immutable --save
  2. E agora podemos converter um redutor de cada vez:

    const reducer = (courses = initialState, action) => {
    courses = Immutable.fromJS(courses) // converting courses to an immutable object
    if (action.type == 'FETCHING_COURSES_SUCCESS') {
    return courses
    .set('status', 'success')
    .set('error', null)
    .set('items', action.items)
    .toJS() // returning usual JS object
    }
    };

Jeito difícil

  1. npm install immutable redux-immutable --save

  2. Importe sua combineReducersfunção recém-instalada redux-immutable, em vez deredux

    import { combineReducers } from 'redux-immutable';
  3. E agora podemos começar a mudar um redutor de cada vez.

    Faça do estado inicial um objeto-js imutável.

    Agora você pode usar métodos imuable-js em seus redutores, como gete set.

    import Immutable from 'immutable';
    const initialState = Immutable.fromJS({
    status: null,
    error: null,
    items: []
    });
    const coursesReducer = (courses = initialState, action) => {
    if (action.type == 'FETCHING_COURSES_SUCCESS') {
    return courses
    .set('status', 'success')
    .set('error', null)
    .set('items', action.items)
    }
    };
  4. Já que o estado é um objeto-js imutável agora, precisamos traduzi-lo para algo que nossos componentes de reação entenderão. Ou seja, simplesmente Js.

    const mapStateToProps = (state) => {
    return {
    courseItems: state.toJS().courses.items
    }
    };