Я относительно новичок в Redux, но, по моим наблюдениям, все данные в хранилище редуксов являются неизменяемыми, и как только они отображаются на реквизиты, они преобразуются в обычные объекты JS.
У меня есть случай, когда моя «полезная нагрузка» является неизменным объектом (неизменяемая вложенная карта).Этот объект хранится в базе данных с помощью функции «tran.toJSON».Используя другое действие / редуктор, этот объект можно извлечь, используя функцию 'tran.fromJSON'.
До редукции приложения, использование этой функции транзита работало нормально (транзит.неизменная форма).Тем не менее, теперь с помощью redux объект возвращается как обычный JS-объект.
Единственное отличие заключается в том, что tranit.fromJSON / transition.toJSON теперь реализуется в редукторе (по сравнению с функциями компонентов реагирования).
В компоненте (отправка объекта в БД):
onSubmit() {
var data = {'data_item': transit.toJSON(item)}
this.props.saveItem(data)
}
В действии (для сохранения объекта в базе данных):
const saveItem = (data) => async(dispatch) => {
const response = await REST.post('/save_item', data)
dispatch({
'type': ITEM_SAVED,
'payload': response.data,
});
}
catch(error) {
console.log(error);
}
В действии для извлеченияобъект из базы данных:
try{
const response = await REST.get('/get_data_item?id='+item_id)
dispatch({
'type': FETCH_ITEM,
'payload': response.data,
})
}
catch(error) {
console.log(error)
}
В редукторе (после извлечения базы данных формы объекта):
case action.FETCH_ITEM:
return state.set('dataItem', transit.fromJSON(payload.data_item)
mapStateToProps:
const mapStateToProps = state => {
const store = state.reportbuilder.toJS();
return {'dataItem': store.dataItem}