redux 形式和 immutable.js
redux-form and immutable.js
在同时使用 immutable.js 和 redux-form 时是否有不需要调用 .toJS()
的方法?
我可以看到关于 this issue 的建议方法是在 Map
对象上调用 .toJS()
,然后再将其传递给表单:
getFormState: (state, reduxMountPoint) => state.get(reduxMountPoint).toJS()
这不会损害您从使用 immutable.js 和限制记忆中获得的性能优势吗?
我很想知道这对性能的影响,在表单繁重的应用程序中仍然值得使用 immutable.js 吗?还有其他不依赖 .toJS()
的方法吗?
当我思考 redux-form 的未来时,我一直在考虑是否在内部使用 ImmutableJS。我短暂地接受了这样一个想法,即我可以通过某种外观以某种方式让相同的代码库同时使用两者,但最终,接口差异太大,ImmutableJS 接口相当冗长,因为不喜欢原生语言语法。
制作使用 ImmutableJS 的 redux-form
的替代版本将需要更改几乎每一行代码,这将是一场维护噩梦。
除非有人能告诉我使用 ImmutableJS 的性能优势超过了将 .toJS()
负担交给选择 不 的人(大多数?)的成本使用 ImmutableJS,我认为更好的做法是像 Redux 本身一样,对存储库保持中立态度。
Are there any other approaches that don't rely on .toJS()
?
所以,回答你的问题:不,如果管理你的 Redux reducer 的库需要普通的 javascript 对象,而你正在为你的 Redux 存储使用 ImmutableJS,你必须自己进行转换.
希望有更好的答案...
编辑:Redux Form 版本 6 开箱即用地支持 ImmutableJS。
正如 Erik 所提到的,不幸的是,Redux-Form 还没有内置的解决方案(目前),部分原因是表单状态和模型状态是一起烘焙的,而不是单独的实体。
如果您不介意分离表单和模型状态,那么允许您使用 Immutable.JS 的模块化解决方案就变得更加可行。这就是我创建 React-Redux-Form.
的原因
以下是使用 React-Redux-Form 获得不可变模型 reducer 的方法:
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;
如果您有一个代表您的模型的现有 Immutable reducer,您可以使用 Immutable 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 导入来使用 "immutable" 版本的 redux-form。
这里是 link:
http://redux-form.com/6.4.3/examples/immutable/
在同时使用 immutable.js 和 redux-form 时是否有不需要调用 .toJS()
的方法?
我可以看到关于 this issue 的建议方法是在 Map
对象上调用 .toJS()
,然后再将其传递给表单:
getFormState: (state, reduxMountPoint) => state.get(reduxMountPoint).toJS()
这不会损害您从使用 immutable.js 和限制记忆中获得的性能优势吗?
我很想知道这对性能的影响,在表单繁重的应用程序中仍然值得使用 immutable.js 吗?还有其他不依赖 .toJS()
的方法吗?
当我思考 redux-form 的未来时,我一直在考虑是否在内部使用 ImmutableJS。我短暂地接受了这样一个想法,即我可以通过某种外观以某种方式让相同的代码库同时使用两者,但最终,接口差异太大,ImmutableJS 接口相当冗长,因为不喜欢原生语言语法。
制作使用 ImmutableJS 的 redux-form
的替代版本将需要更改几乎每一行代码,这将是一场维护噩梦。
除非有人能告诉我使用 ImmutableJS 的性能优势超过了将 .toJS()
负担交给选择 不 的人(大多数?)的成本使用 ImmutableJS,我认为更好的做法是像 Redux 本身一样,对存储库保持中立态度。
Are there any other approaches that don't rely on
.toJS()
?
所以,回答你的问题:不,如果管理你的 Redux reducer 的库需要普通的 javascript 对象,而你正在为你的 Redux 存储使用 ImmutableJS,你必须自己进行转换.
希望有更好的答案...
编辑:Redux Form 版本 6 开箱即用地支持 ImmutableJS。
正如 Erik 所提到的,不幸的是,Redux-Form 还没有内置的解决方案(目前),部分原因是表单状态和模型状态是一起烘焙的,而不是单独的实体。
如果您不介意分离表单和模型状态,那么允许您使用 Immutable.JS 的模块化解决方案就变得更加可行。这就是我创建 React-Redux-Form.
的原因以下是使用 React-Redux-Form 获得不可变模型 reducer 的方法:
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;
如果您有一个代表您的模型的现有 Immutable reducer,您可以使用 Immutable 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 导入来使用 "immutable" 版本的 redux-form。
这里是 link:
http://redux-form.com/6.4.3/examples/immutable/