我正在编写一些反应代码,在其中构建诊断列表。这些诊断是动态构建的,因此可以通过单击将其添加到子诊断和属性。因此,我想知道某些潜在诊断在列表中的位置,因此在创建新诊断时,我给它提供了一个路径作为属性,然后可以使用该路径从列表中导航到该路径。

我希望能够为给定的诊断设置属性“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/

10-12 16:27