我有一个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]
丹·阿布拉莫夫已经弄明白了。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操作符来获得唯一的值,但我不知道如何组合所有这些。