正确的使用方法与Redux的immutablejs(toJS和fromJS)(Correct way

2019-09-29 09:59发布

我不知道这是用正确的方式immutable.js与终极版和reselect (也redux-saga )。 具体来说,我想知道toJS()fromJS()并在使用它们。 我的想法是:

  1. 我用toJS()将数据发送到一个传奇。
  2. 不使用 fromJS()因为我认为这是事实,我使用反正做过减速fromJS()的初始化状态。 还是我错了?
  3. 我用toJS()在选择从reselect ,所以我可以使用JS数据反应组分。

例:

1)在我的反应组件我做的:

// mapDispatchToProps
   function mapDispatchToProps(dispatch) {
      return {
         loginRequest: values => dispatch(loginRequest(values)),
      };
   }

// Sending values.toJS() to my redux-saga. 
   submit = values => {
      this.props.loginRequest(values.toJS());
   };

2)在减速机怎么办?( 应该使用一个fromJS()在这里不按照Redux的文档,你应该)?

const { fromJS } = require('immutable');
const state = fromJS({
  pages: {
    usersPage: {
      loading: false,
      isFetched: false,
      list: [],
    }
  }
});
function reducer(state, action) {
  switch(action.type) {
    case 'USERS_LOADED':
      return state
        .setIn(['usersPage', 'list'], action.payload) // fromJS() here or not?
        .setIn(['usersPage', 'isFetched'], true)
        .setIn(['usersPage', 'loading'], false)
        ;
    default:
      return state;
  }
}
export default reducer;

3)在我选择我做toJS()再次:

const selectUser = state => state.get('user', initialState);
const makeSelectList= () =>
   createSelector(selectUser, userState => userState.getIn(['usersPage', 
'list']).toJS());

// Which I then use in my react component:
const mapStateToProps = createStructuredSelector({
   list: makeSelectList(),
});

所以基本上我不知道这是否是皈依的JS和不变之间的正确流程。 或者可以以某种方式(少皈依步骤)进行优化? 也许上面是逻辑的非最佳方法是什么?

最好的祝福

Answer 1:

  1. 佐贺-正在终极版中间件-可以直接处理稳定的类型,无需使用昂贵的toJS来电来访

  2. 任何你转换(如点setsetInupdate等),纯JS非简单类型为不可变的终极版状态树,用fromJS确保完全不可改变的类型让整个状态树上不变

  3. 恕我直言,选择(如reselect ) -由最初的检索后提供记忆化-可利用昂贵的最理想的地方toJS调用,在你的榜样3#。 我想这真的取决于多少一个在他们的“容器/智能”组件使用不可改变的检索方法不喜欢,和/或创建一大堆选择的从Redux的状态树检索简单的JS类型使用一成不变的无处不在

对我来说,有哪里实际使用的问题fromJS调用,如行动的创作者,在“集装箱/智能”组件调度,或在减速,如react-boilerplate使用fromJS在减速机调用。



文章来源: Correct way to use immutablejs (toJS and fromJS) with redux