Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将immutablejs(toJS和fromJS)与redux一起使用的正确方法_Javascript_Reactjs_Redux_Immutable.js - Fatal编程技术网

Javascript 将immutablejs(toJS和fromJS)与redux一起使用的正确方法

Javascript 将immutablejs(toJS和fromJS)与redux一起使用的正确方法,javascript,reactjs,redux,immutable.js,Javascript,Reactjs,Redux,Immutable.js,我想知道这是否是将immutable.js用于redux和reselect(也是redux-saga)的正确方法。具体来说,我想知道toJS()和fromJS()以及在哪里使用它们。 我的想法是: 我使用toJS() 我不在reducer中使用fromJS(),因为我认为这是通过我使用fromJS()作为initialState来实现的。还是我错了 我在selector fromreselect中使用toJS() 例如: 1) 在我的react组件中,我执行以下操作: // mapDispatc

我想知道这是否是将
immutable.js
用于redux和
reselect
(也是
redux-saga
)的正确方法。具体来说,我想知道
toJS()
fromJS()
以及在哪里使用它们。 我的想法是:

  • 我使用
    toJS()
    
  • 我不在reducer中使用
    fromJS()
    ,因为我认为这是通过我使用
    fromJS()
    作为initialState来实现的。还是我错了
  • 我在selector from
    reselect
    中使用
    toJS()
    例如:

    1) 在我的react组件中,我执行以下操作:

    // 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) 在reducer中,我是这样做的(是否应该使用
    fromJS()
    ?根据redux文档,您应该):

    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和immutable之间正确的转换流。或者可以通过某种方式进行优化(减少转换步骤)?也许以上是一种非最佳的逻辑方式

    致意

  • saga——作为redux中间件——可以直接处理不可变类型,无需在此处使用昂贵的
    toJS
    调用

  • 将普通JS非简单类型转换为不可变redux状态树的任何点(例如,
    set
    setIn
    update
    ,等等),请使用
    fromJS
    确保完全不可变类型

  • 此外,选择器(例如,
    reselect
    )——通过在初始检索后提供备忘录——可能是利用昂贵的
    toJS
    调用的最理想的地方,如您的示例3所示。我想这真的取决于人们有多不喜欢在“容器/智能”组件中使用不可变的检索方法,和/或创建一大堆选择器从redux状态树检索简单的JS类型


  • 对我来说,有一个问题是在哪里实际使用
    fromJS
    调用,例如action creators,在“容器/智能”组件调度中,或者在reducer中,例如
    react样板文件
    在reducer中使用
    fromJS
    调用。

    谢谢,但是在1)如果不使用toJS()我会出错例如,@user1665355是不可变的
    类型,或者在该实例中它是来自js
    'd的?
    来自redux表单,是的,它们是不可变的
    映射
    澄清,我使用
    toJS()
    在1)中,因为我将这些值传递给
    fetch
    ,后者需要简单的js值。您可以正确地看到
    react样板文件在reducer中使用
    fromJS
    ,在selector:中使用
    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(),
    });