【发布时间】:2019-05-08 00:56:36
【问题描述】:
我正在编写一些反应代码,其中我构建了一个诊断列表。这些诊断是动态构建的,因此可以通过单击它们来添加子诊断和属性。因此,我想知道一些潜在诊断在我的列表中的位置,因此在创建新诊断时,我给它一个路径作为属性,然后我可以使用它从列表中导航到它。
我希望能够为给定的诊断设置一个属性“showRequirements”,为此我实现了以下两个功能:
onClick = (path) => () => {
let currentDiagnosis = this.state[path[0].type][parseInt(path[0].key, 10)];
if (path.length > 1) {
this.showRequirementsFromPath(path, currentDiagnosis.algorithm.children, 1)
}
else {
currentDiagnosis.showRequirements = !currentDiagnosis.showRequirements;
}
this.setState({
[this.state[path[0].type][parseInt(path[0].key, 10)]]: currentDiagnosis,
})
}
showRequirementsFromPath = (path, diagnosis, counter) => {
if (counter < path.length) {
diagnosis[path[counter].key].showRequirements = true;
this.showRequirementsFromPath(path, diagnosis[path[counter].key], counter + 1);
}
else {
diagnosis.showRequirements = !diagnosis.showRequirements;
}
}
当路径长度为 1 时 onClick 有效,所以我认为问题出在 showRequirementsFromPath 函数中。如果我以长度 > 1 的路径运行它,应用程序会崩溃,并且我会收到错误消息“递归过多”。但是,如果我从 showRequirementsFromPath 中的 else 中删除 diagnostic.showRequirements = !diagnosis.showRequirements,应用程序不会崩溃,并且除了设置属性 showRequirements 之外,它还可以完美地完成所有操作。
这是我在这里的第一篇文章,所以请告诉我是否违反了一些准则/我可以在以后的文章中做得更好。
提前致谢!
编辑:如所问,path[0].key 的类型是字符串。注意当 counter > 0 时 path[counter].key 是一个整数。
【问题讨论】:
-
请添加
path[0].key的类型和可能的值。
标签: javascript reactjs recursion