我对Redux比较陌生,但是根据我的观察,redux存储中的所有数据都是不可变的,一旦将其映射到props,它将转换为普通的JS对象。
我有一种情况,我的“有效载荷”是一个不可变对象(不可变嵌套Map)。使用“ transit.toJSON”功能将该对象存储到数据库中。使用另一个动作/归约器,可以使用“ transit.fromJSON”函数来检索此对象。
在重新分配应用程序之前,使用此传输函数可以正常工作(transit.fromJSON将数据转换为正确的不可变形式)。但是现在有了redux,该对象将作为普通的JS对象返回。
唯一的区别是transit.fromJSON / transit.toJSON现在正在reducer中实现(相对于react组件函数)。
在组件中(将对象提交给db):
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}
答案 0 :(得分:1)
Redux本身不进行任何转换。 Redux甚至不知道您的实际数据是什么。 您对此负责,方法是编写适用于某些数据类型的化简器,然后在您的mapStateToProps
函数中提取该数据。
如果您可以提供一些特定的示例,说明正在使用的数据以及以意外方式“转换”数据的位置,则可能会有所帮助。但是,通常,您负责编写处理该数据的所有代码。