[英]redux-form and immutable.js
使用immutable.js和redux-form时是否有不需要调用.toJS()
?
我可以看到关于此问题的建议方法是在将Map
对象传递给表单之前调用.toJS()
:
getFormState: (state, reduxMountPoint) => state.get(reduxMountPoint).toJS()
这是否不影响您使用immutable.js和限制备注所带来的性能优势?
我很想知道这对性能的影响,在一个笨重的应用程序中使用immutable.js仍然值得吗? 还有其他不依赖于.toJS()
吗?
在考虑redux-form的未来时,我一直在来回研究是否在内部使用ImmutableJS。 我简短地接受了这样的想法,即我可以通过某种外观以某种方式使用相同的代码库来使用两者,但是最后,接口太不同了,由于不喜欢本机,ImmutableJS接口更加冗长语言语法。
制作使用ImmutableJS的redux-form
的替代版本将需要更改几乎每一行代码,这将是维护的噩梦。
除非有人能告诉我使用ImmutableJS的性能优势胜过给选择不使用ImmutableJS的人们(大多数?) .toJS()
负担的代价, .toJS()
我认为更好的做法是像Redux一样,对存储库保持不受质疑。
还有其他不依赖于
.toJS()
吗?
因此,要回答您的问题:不,如果管理Redux减速器的库期望使用纯Javascript对象,并且您在Redux商店中使用ImmutableJS,则必须自己进行转换。
希望有一个更好的答案...
编辑:Redux Form的版本6支持开箱即用的ImmutableJS。
正如Erik所提到的,不幸的是,还没有Redux-Form的内置解决方案(尚未),这部分是由于这样的事实,即表单状态和模型状态是一起烘焙的,而不是单独的实体。
如果您可以将表单状态和模型状态分开,那么使用Immutable.JS的模块化解决方案将变得更加可行。 这就是为什么我创建React-Redux-Form的原因 。
这是使用React-Redux-Form拥有不可变模型简化器的方法:
import { createStore, combineReducers } from 'redux';
import { createModelReducer } from 'react-redux-form/lib/immutable';
import Immutable from 'immutable';
const store = createStore(combineReducers({
'user': createModelReducer('user', Immutable.Map())
}));
export default store;
如果您有一个表示模型的不可变简化器,则可以使用不可变modeled modeled()
装饰器对其进行装饰:
import { createStore, combineReducers } from 'redux';
import { modeled } from 'react-redux-form/lib/immutable';
// existing immutable reducer
import userReducer from '../reducers/user-reducer';
const store = createStore(combineReducers({
'user': modeled(userReducer, 'user')
}));
export default store;
您可以通过从redux-form / immutable而不是redux-form导入来使用redux-form的“不可变”版本。
这里的链接: http : //redux-form.com/6.4.3/examples/immutable/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.