javascript - 如何防止 Redux 转换不可变数据(使用 Transit.fromJSON 时)?

标签 javascript reactjs redux

我对 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/

相关文章:

javascript - 如何在 node.js 中读取整个文本流?

javascript - 仅在初始渲染后才 react CSS 动画

javascript - redux-api-middleware 如何向 store 添加数据?

javascript - 我可以在 Hyperstack 中制作功能组件吗?

javascript - 如何正确使用react-router

redux - 如何将 Redux 操作拆分为多个文件

typescript - typescript 中的 redux-toolkit createAction() 类型定义

javascript - 解析涉及 ajax 的函数的参数

javascript - JavaScript array.length 的时间复杂度

javascript - JSONP 和 Backbone.js