我对 Redux 比较陌生,但根据我的观察,redux 存储中的所有数据都是不可变的,一旦映射到 props,它就会转换为普通的 JS 对象。
我有一个情况,我的“有效负载”是一个不可变的对象(不可变的嵌套映射)。该对象正在使用“transit.toJSON”函数存储到数据库中。使用另一个操作/ reducer ,可以使用“transit.fromJSON”函数检索该对象。
在重新设计应用程序之前,使用此传输函数运行良好(transit.fromJSON 正在将数据转换为正确的不可变形式)。但现在使用 redux,该对象将作为普通 JS 对象返回。
唯一的区别是transit.fromJSON/transit.toJSON现在在reducer中实现(相对于react组件函数)。
在组件中(向数据库提交对象):
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}
最佳答案
Redux 本身不做任何转换。 Redux 甚至不知道你的实际数据是什么。 您负责所有这些,通过编写处理某些数据类型的 reducer ,并在 mapStateToProps
函数中提取该数据。
如果您可以提供一些具体示例,说明您正在使用哪些数据以及数据在何处以意想不到的方式“转换”,这可能会有所帮助。但是,一般来说,您负责编写操作该数据的所有代码。
关于javascript - 如何防止 Redux 转换不可变数据(使用 Transit.fromJSON 时)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54911569/