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 fromreselect
中使用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(),
});