我对Redux比较陌生,但从我的观察来看,redux存储中的所有数据都是不可变的,一旦它被映射到props,它就会被转换成普通的JS对象。
我有一个例子,我的'payload‘是一个不可变的对象(不可变的嵌套映射)。此对象正在使用'transit.toJSON‘函数存储到数据库中。通过使用另一个操作/缩减程序,可以使用'transit.fromJSON‘函数检索此对象。
在对应用程序进行Redux化之前,使用此传输函数工作得很好(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)
}
在reducer中(从数据库检索对象后):
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}
发布于 2019-02-28 02:30:42
Redux本身不做任何转换。Redux甚至不知道你的实际数据是什么。通过编写处理某些数据类型的缩减程序,并在mapStateToProps
函数中提取数据,您可以对所有这些工作负责。
如果你能给出一些具体的例子,说明你正在处理什么数据,以及它在哪里以意想不到的方式被“转换”,这可能会有所帮助。但是,通常情况下,您要负责编写操作该数据的所有代码。
https://stackoverflow.com/questions/54911569
复制相似问题