当前位置: 首页 > 知识库问答 >
问题:

如何映射包含react、redux中对象嵌套数组的嵌套对象数组

孙佐
2023-03-14

我有一个mongodb文档,我正在使用axios ajax调用来提取它。文档有一个对象数组,其中还包含一个嵌套的对象数组。每个对象都分配了一个mongo id。最顶端的数据显示在相应的最顶端的表示组件中,但对象的后续阵列不会显示在其相对表示组件中。我得到的错误是。“TypeError:this.props.card.rdfts未定义”,但会显示它的非数组同级。然而,当我查看react-dev工具和redux-dev工具时,对象数组实际上就在那里,并且作为包含对象数组的对象数组。

我搜索了无数的stackoverflow文章以及无数的github文章。我尝试过许多不同的方法,但似乎都不管用。

我的mongodb文档是。。。

{
"_id" : ObjectId("58d93a23a62fdfa37438b4ca"),
"url" : "/api/Rationale/Restraint/Model/1",
"type" : "body",
"title" : "title",
"vid" : {
    "_id" : ObjectId("58d93a23a62fdfa37438b4c3"),
    "type" : "video",
    "src" : "somesrc",
    "border" : "1",
    "width" : "400",
    "height" : "200",
    "frameborder" : "0",
    "allowfullscreen" : false
},
"topic" : "Topic?",
"rdfts" : [ 
    {
        "_id" : ObjectId("58d93a23a62fdfa37438b4c4"),
        "rdft" : "ReasonDetailFactTransition",
        "explainations" : [ 
            {
                "_id" : ObjectId("58d93a23a62fdfa37438b4c5"),
                "explaination" : "Explaination1"
            }, 
            {
                "_id" : ObjectId("58d93a23a62fdfa37438b4c6"),
                "explaination" : "Explaination2"
            }
        ]
    }, 
    {
        "_id" : ObjectId("58d93a23a62fdfa37438b4c7"),
        "rdft" : "Reason Detail Fact Transition 2",
        "explainations" : [ 
            {
                "_id" : ObjectId("58d93a23a62fdfa37438b4c8"),
                "explaination" : "Explaination1"
            }, 
            {
                "_id" : ObjectId("58d93a23a62fdfa37438b4c9"),
                "explaination" : "Explaination2"
            }
        ]
    }
],
"conclusion" : "Conclusion of Card"

}

我正在从componentwillmount调用ajax

componentWillMount() {
    console.log("componentDidMount")
    let myURI = ''; {
        let { api, page, section, subsection, card } = this.props.match.params;
        myURI = `/${api}/${page}/${section}/${subsection}/${card}`;
    }
    console.log("json call 1")
    this.props.dispatch(asyncSetCard(myURI));

}

这是我的砰砰声,似乎并没有阻止控制流。

asyncSetCard(uri) {
  return dispatch => {

    return axios.get(uri).then(response => {

      dispatch(setCardSuccess(response.data[0]));

    }).catch(error => {

      throw (error);
    });
  }
}

所以ajax调用似乎可以工作,但是当我试图用其他嵌套的对象数组渲染嵌套的对象数组时,我得到了上面的TypeError。

这在渲染函数中发生

render() {
    return (
        <div>
            <h2>Title: {this.props.card.title}</h2>
            <h3>Topic: {this.props.card.topic}</h3>
                       {this.props.card.rdfts.map(RDFTs)}
            <h3>Conclusion: {this.props.card.conclusion}</h3>
        </div>
    );
}

如果我删除{this.props.card.rdfts.map(rdfts)},则显示文档的第一级。如果我把它放回去,随后的嵌套文档数组就不会显示,我会得到以下错误。“TypeError:this.props.card.rdfts未定义

我试着一次处理一个级别的对象数组,但这似乎不起作用。

此外,我的公理promise似乎并没有停止停止控制流。我本来想解决的promise,然后渲染,但它似乎只是落空,渲染是立即调用。我想知道对象数组是否没有及时实例化,或者是什么,但它似乎不起作用。

如果你看一下我的控制台,你会发现我在promise得到解决之前就已经犯了错误,但这不重要,因为react直接从状态树读取。状态树更新后,react应该更新。正当

15:40:24.978获取mybuldleyadabundle.js[HTTP/1.1200OK 117ms]

15:40:26.855部件安装卡CC.jsx:42:13

15:40:26.867类型错误:this.props.card.rdfts未定义[了解更多信息]。。。

15:40:27.327获取XHR myhttpurl.herokuapp.com/api/rational/restriction/Model/1[HTTP/1.1 200 OK 143ms]

15:40:27.800获取XHR mylocalhost:3001/sockjs节点/info[HTTP/1.1 200 OK 2ms]

共有1个答案

赖翰
2023-03-14

丹·阿布拉莫夫已经弄明白了。https://github.com/paularmstrong/normalizr. 我需要的是标准化器。:)谢谢Dan,还有Cory的帮助。

 类似资料:
  • 问题内容: 我试图映射对象数组,每个数组包含另一个嵌套的对象数组。但是,该映射不适用于嵌套数组。我如何在嵌套数组的内容上进行映射,同时使所有的父对象保持相同? 小提琴: https : //jsfiddle.net/69z2wepo/249197/ 数据结构如下: 地图看起来像 问题答案: 由于每个元素都有一个数组,因此您也必须结束。 例

  • 我试图更新嵌套数组中的对象,下面是我的状态示例。我试图在目标内更新对象,我成功地更新了对象。 但是 每次我更新任何对象。索引0处的对象将获得所有对象的副本。我更新的次数越多,它就会创建更多的副本,它们就会嵌套在索引0处的对象中。 索引0处的对象也将使用任何对象的最新更新进行更新。 keyName=列表中对象的索引。(位于“0”和“1”上方的两个值:{) 此外,如果你知道任何好的留档或规范化的教程,

  • 我创建映射如下所示。如何将平面dto对象属性(街道、城市等)映射到域对象中的嵌套地址。当我试着去做的时候,我发现了一个错误: [错误]诊断:返回类型中的属性“Address.PostalCode”未知。@Mapping(来源=“City”,目标=“Address.City”), 还有类...

  • 问题内容: 我有一个带有以下渲染的组件: policyLegend是一个对象数组,每个对象内都有一个“值”数组。 构建应用程序时,我没有收到任何错误,但是在组件页面上没有任何显示。我不确定我要去哪里错,请多多指教,谢谢。 问题答案: 这是因为您没有在policyLegend映射内返回任何内容。试试这个:

  • 问题内容: 我映射了多个对象。 我如何嵌套一个循环,以便首先遍历对象,然后遍历(在此示例中)城市?谢谢! 我的没有嵌套外观的渲染函数如下所示: 城市对象示例: 问题答案: 您可以使用嵌套映射来映射内部子对象以及

  • 尝试使用所有独特的硬币进行选择过滤器,但无法正确到达其末尾。 在循环浏览数据时,我可以得到所有硬币的列表。 我还想使用Set方法和spread操作符来获得唯一的值,但我不知道如何组合所有这些。