首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何防止Redux转换不可变数据(当使用transit.fromJSON时)?

如何防止Redux转换不可变数据(当使用transit.fromJSON时)?
EN

Stack Overflow用户
提问于 2019-02-28 01:49:02
回答 1查看 53关注 0票数 0

我对Redux比较陌生,但从我的观察来看,redux存储中的所有数据都是不可变的,一旦它被映射到props,它就会被转换成普通的JS对象。

我有一个例子,我的'payload‘是一个不可变的对象(不可变的嵌套映射)。此对象正在使用'transit.toJSON‘函数存储到数据库中。通过使用另一个操作/缩减程序,可以使用'transit.fromJSON‘函数检索此对象。

在对应用程序进行Redux化之前,使用此传输函数工作得很好(transit.fromJSON将数据转换为适当的不可变形式)。然而,现在有了redux,该对象将作为普通的JS对象返回。

唯一的区别是transit.fromJSON/transit.toJSON现在是在一个reducer中实现的(而不是在react组件函数中)。

在组件(向db提交对象)中:

代码语言:javascript
复制
onSubmit() {
    var data = {'data_item': transit.toJSON(item)}
    this.props.saveItem(data)
}

在操作中(用于将对象保存到数据库):

代码语言:javascript
复制
 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);
      }

在从数据库检索对象的操作中:

代码语言:javascript
复制
 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中(从数据库检索对象后):

代码语言:javascript
复制
case action.FETCH_ITEM:
    return state.set('dataItem', transit.fromJSON(payload.data_item)

mapStateToProps:

代码语言:javascript
复制
const mapStateToProps = state => {
    const store = state.reportbuilder.toJS();
    return {'dataItem': store.dataItem}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-28 02:30:42

Redux本身不做任何转换。Redux甚至不知道你的实际数据是什么。通过编写处理某些数据类型的缩减程序,并在mapStateToProps函数中提取数据,您可以对所有这些工作负责。

如果你能给出一些具体的例子,说明你正在处理什么数据,以及它在哪里以意想不到的方式被“转换”,这可能会有所帮助。但是,通常情况下,您要负责编写操作该数据的所有代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54911569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档