2016-02-25 3 views
2

Существуют ли какие-либо подходы при использовании как immutable.js, так и редукционной формы, которые не требуют вызова .toJS()?redux-form и immutable.js

я могу видеть, предложенный подход на this issue является вызов .toJS() на Map объекта перед передачей его в виде:

getFormState: (state, reduxMountPoint) => state.get(reduxMountPoint).toJS() 

ли это не скомпрометировать выигрыш в производительности вы получаете от использования immutable.js и предела запоминание?

Мне интересно узнать о влиянии этого воздействия на производительность, будет ли еще полезно использовать immutable.js в форме тяжелого приложения? Существуют ли какие-либо другие подходы, которые не зависят от .toJS()?

ответ

4

Как я размышляю о будущем редукционной формы, я возвращаюсь туда и обратно, следует ли использовать ImmutableJS внутренне. Я кратко рассмотрел идею о том, что я мог бы каким-то образом получить одну и ту же кодовую базу, используя оба варианта, через какой-то фасад, но, в конце концов, интерфейсы слишком отличаются друг от друга, интерфейс ImmutableJS является значительно более подробным, вследствие того, что он не пользуется родным синтаксис языка.

Выполнение альтернативной версии redux-form, использующей ImmutableJS, потребует изменения почти каждой строки кода и будет кошмаром для обслуживания.

Если кто-то может показать мне, что эксплуатационные преимущества использования ImmutableJS перевешивают стоимость давая .toJS() бремя для людей (большинство?), Кто выбирает не использовать ImmutableJS, я думаю, что лучше курс действий является, как и сам Редкс, остаются без внимания в библиотеках хранилищ.

Есть ли какие-либо другие подходы, которые не полагаются на .toJS()?

Таким образом, чтобы ответить на ваш вопрос: Нет, если библиотека управлении восстановителей Redux ожидает обычный JavaScript объекты, и вы используете ImmutableJS для Redux магазина, вы должны сделать преобразование самостоятельно.

Желания были лучше ответ ...

EDIT: Version 6 из Redux формы поддерживает ImmutableJS из коробки.

+0

Существует альтернатива .toJS(), и это называется бесшовным-неизменным. –

2

Как упоминал Эрик, к сожалению, нет встроенного решения с 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() декоратора:

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; 
0

Вы можете использовать «неизменяемую» версию редукционной формы путем импорта из сокращаемой формы/неизменяемой вместо редукционной формы.
здесь ссылка: http://redux-form.com/6.4.3/examples/immutable/

 Смежные вопросы

  • Нет связанных вопросов^_^