在使用immutable.js和redux-form时是否有不需要调用.toJS()的方法?
我可以看到,在本期上建议的方法是在将Map对象传递给表单之前调用Map对象上的.toJS():
getFormState: (state, reduxMountPoint) => state.get(reduxMountPoint).toJS()这难道不损害从使用immutable.js和限制回忆录中获得的性能好处吗?
我很想知道这对性能的影响,是否仍然值得在大量的应用中使用immutable.js?有没有其他不依赖.toJS()的方法?
发布于 2016-02-25 15:22:37
在我思考redux形式的未来时,我一直在反复讨论是否在内部使用ImmutableJS。我简要地接受了这样的想法:通过某些外观,我可以以某种方式让相同的代码库使用这两种代码库,但最终,接口太不一样了,ImmutableJS接口非常冗长,这是由于不喜欢本机语言语法。
制作使用ImmutableJS的替代版本将需要更改几乎每一行代码,这将是维护的噩梦。
除非有人能告诉我,使用ImmutableJS的性能优势超过了将.toJS()负担给人们的成本(多数?)选择不使用ImmutableJS的人,我认为更好的做法是,就像Redux本身一样,对存储库保持中立。
还有其他不依赖
.toJS()的方法吗?
因此,要回答您的问题:不,如果管理Redux还原程序的库期望使用普通的javascript对象,并且您使用ImmutableJS作为Redux存储,则必须自己进行转换。
希望有更好的答案..。
编辑: Redux的版本6支持开箱即用的ImmutableJS .
发布于 2016-02-28 16:46:44
正如Erik所提到的,遗憾的是,Redux-Form (尚未)没有内置的解决方案,部分原因是表单状态和模型状态是一起的,而不是单独的实体。
如果您可以分离表单和模型状态,那么使用Immutable.JS的模块化解决方案就变得更加可行。这就是我创建反应-保留-形式的原因。
下面是如何使用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()装饰器来装饰它:
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;发布于 2017-01-05 10:30:02
通过从redux-form/immutable导入而不是redux-form,您可以使用redux-form的“不可变”版本。
以下链接:http://redux-form.com/6.4.3/examples/immutable/
https://stackoverflow.com/questions/35630781
复制相似问题