reactjs - 递归无法正常工作(在 React 中)
问题描述
我有以下代码:
export function App() {
return (
<div>
<EditText tags={[[["b",28,32]],[["br",40,40]],[["i",43,88],["b",56,64],["b",74,84]],[["b",102,105]]]}/>
</div>
);
}
export const EditText = ({ tags }) => (
<>
{
tags.map((section, id) => {
console.log("id",id);
if (section[0][0] === "i") {
if (id!==0) {
console.log("entering recursion");
return <EditText key={id} tags={section} />
}
}
return("");
})
}
</>
);
为了使其更直观,数组如下所示:
[
[["b",28,32]],
[["br",40,40]],
[
["i",43,88],["b",56,64],["b",74,84]
],
[["b",102,105]]
]
我希望这个算法在控制台中打印这样的 id:
0 1 2 0 1 2 3
因为递归是在映射中的第三个序列之后调用的。但相反,它打印的是:
0 1 2 3 0 1 2
它正在结束第一张地图,只有在它结束时,他才记得调用递归。
谁能解释我为什么会这样?
解决方案
我仍然认为这里有一些误解,所以回答你的具体问题:
它正在结束第一张地图,只有在它结束时,他才记得调用递归。
谁能解释我为什么会这样?
你的假设是正确的。循环 ( tags.map(...)
) 在进行递归调用之前运行完成(这解释了console.log
输出)。
当您将一些值映射到新组件(如:)时,会发生这种情况return <EditText key={id} tags={section} />
,此时这些新组件(充当函数)不会立即被调用/执行,但只有当 react 在渲染新创建的数组时遇到它们时(返回的值.map
)。
这与某人特别的答案中显示的纯 JavaScript 示例的行为不同。立即进行递归调用的地方 ( editText(section)
)。
推荐阅读
- alexa-presentation-language - Alexa 模拟器中的 OpenUrl 命令
- python - Pandas groupby 基于列值
- mysql - MySQL:检查一个表中的列数与第二个表的列中的值
- wpf - 如何将 CollectionViewSource 绑定到 DataGrid
- javascript - 不能将两个存储 offsetHeight 的变量加在一起
- selenium - 使用带有 Selenium 的 Xpath 进行复选框
- flutter - 在颤动中获取“文件$”而不是文件
- jenkins - jenkins executor 自动重置一段时间,通过 kubernetes 方式部署
- group-by - Dax 度量来计算一组完整表中的最小值
- r - 如何在 r 中使用 k-mean 划分区域?