javascript / reactjs中具有多个参数的递归函数

时间:2018-12-06 10:39:47

标签: javascript reactjs recursion

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

我希望能够为给定的诊断设置属性“ 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的路径运行该应用程序,则该应用程序将崩溃,并显示错误消息“ Too too recursion”。但是,如果我从showRequirementsFromPath中的else删除diagnostic.showRequirements =!diagnosis.showRequirements,则该应用不会崩溃,并且除了设置属性showRequirements外,它还能完美地完成所有工作。

这是我在这里的第一篇文章,所以请告诉我是否违反了一些准则/在以后的文章中我可以做得更好。

谢谢!

编辑:根据要求,路径[0] .key的类型为String。请注意,当counter> 0时path [counter] .key是一个整数。

1 个答案:

答案 0 :(得分:0)

更新:很抱歉,我只是发现问题出在代码的其他地方。我相信我发布的代码实际上是正确的。