时间:2019-02-27 17:49:02

标签: javascript reactjs redux

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

1 个答案:

答案 0 :(得分:1)

Redux本身不进行任何转换。 Redux甚至不知道您的实际数据是什么。 对此负责,方法是编写适用于某些数据类型的化简器,然后在您的mapStateToProps函数中提取该数据。

如果您可以提供一些特定的示例,说明正在使用的数据以及以意外方式“转换”数据的位置,则可能会有所帮助。但是,通常,负责编写处理该数据的所有代码。