【问题标题】:recursive function with multiple parameters in javascript/reactjsjavascript/reactjs中具有多个参数的递归函数
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 2021-11-01
    • 2017-08-23
    • 1970-01-01
    相关资源
    最近更新 更多