javascript - useEffect 中的函数运行一次,而我想同时运行
问题描述
我有一个数组,length === 4
请注意,长度可能会因一些外部参数而异。我想运行一个函数,该函数使用 useEffect 根据我的数组 onComponentDidMount 的长度生成输入字段。
const [blankField, setBlankField] = useState([dynamicFields]); // This adds the input fields with the required data
const legs = [{...}, {...}, {...}, {...}]; // the length of legs[] may vary in number
const addField = () => {
setBlankField([...blankField, [...dynamicFields]]);
};
useEffect(() => {
if (legs) {
legs.map(leg => {
console.log(leg);
return addField();
});
}
}, []);
blankFields.map(......);
我希望它立即生成与组件安装的数组长度一样多的字段。
解决方案
如果你给[]
as dependency of useEffect
,它只会在组件安装时运行一次。而是将其写为,
useEffect(() => {
if (legs) {
legs.map(leg => {
setCount([count + 1]);
console.log(count, leg);
return addField();
});
}
}, [legs.length]);
现在,它会在每次更改时触发length
推荐阅读
- python - Keras 训练的回归模型预测所有测试特征集的相同输出
- tensorflow - 如何在 Keras 中将图层乘以常数向量元素?
- java - 为什么代码不能在 for 循环中工作?
- python - 如何使用 pandas 或 dask 并行化这个 for 循环(或使其更快)
- python - 我正在努力从 Python 实现 RTransferEntropy
- python - 在模板中渲染 ValidationError
- apache2 - 阻止每个 iptables 的 IP 地址不起作用
- postgresql - 需要帮助来严格指定 PostgreSQL 的摄取者角色
- c# - 如何在没有回发的情况下使用 OnselectedIndexChange?
- mysql - Node.js 连接到 mysql 数据库回调函数未执行