我正在编写一些反应代码,在其中构建诊断列表。这些诊断是动态构建的,因此可以通过单击将其添加到子诊断和属性。因此,我想知道某些潜在诊断在列表中的位置,因此在创建新诊断时,我给它提供了一个路径作为属性,然后可以使用该路径从列表中导航到该路径。
我希望能够为给定的诊断设置属性“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外,它还能完美地完成所有工作。
这是我在这里的第一篇文章,所以请告诉我是否违反了一些准则/在以后的文章中我可以做得更好。
提前致谢!
编辑:根据要求,路径[0] .key的类型为String。请注意,当counter> 0时path [counter] .key是一个整数。
最佳答案
更新:很抱歉,我只是发现问题出在代码的其他地方。我相信我发布的代码实际上是正确的。
关于javascript - javascript/reactjs中具有多个参数的递归函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53649527/