繁体   English   中英

redux-form和immutable.js

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM