Интересно, это правильный способ использования immutable.js
с редуксом и reselect
(также redux-saga
). Конкретно мне интересно про toJS()
и от fromJS()
и где их использовать.
Моя идея такова:
- Я использую
toJS()
при отправке данных в сагу.
- I не использует
fromJS()
в редукторе, потому что я думаю, что это все равно происходит из-за того, что я использую fromJS()
для initialState. Или я не прав?
- Я использую
toJS()
в селекторе из reselect
, поэтому я могу использовать данные js в компоненте реагирования.
* * 1 022 Пример: * 1 023 *
1) В моем реактивном компоненте я делаю:
// mapDispatchToProps
function mapDispatchToProps(dispatch) {
return {
loginRequest: values => dispatch(loginRequest(values)),
};
}
// Sending values.toJS() to my redux-saga.
submit = values => {
this.props.loginRequest(values.toJS());
};
2) В редукторе я делаю ( должен один раз использовать fromJS()
здесь или нет? В соответствии с документацией на редуктор вы должны):
const { fromJS } = require('immutable');
const state = fromJS({
pages: {
usersPage: {
loading: false,
isFetched: false,
list: [],
}
}
});
function reducer(state, action) {
switch(action.type) {
case 'USERS_LOADED':
return state
.setIn(['usersPage', 'list'], action.payload) // fromJS() here or not?
.setIn(['usersPage', 'isFetched'], true)
.setIn(['usersPage', 'loading'], false)
;
default:
return state;
}
}
export default reducer;
3) В моем селекторе я снова делаю toJS()
:
const selectUser = state => state.get('user', initialState);
const makeSelectList= () =>
createSelector(selectUser, userState => userState.getIn(['usersPage',
'list']).toJS());
// Which I then use in my react component:
const mapStateToProps = createStructuredSelector({
list: makeSelectList(),
});
Так что в основном мне интересно, является ли это правильным потоком преобразования между js и неизменным. Или это может быть каким-то образом оптимизировано (меньше шагов конвертации)? Может быть, вышесказанное - неоптимальный способ логики?
С наилучшими пожеланиями