有人可以解释为什么我不能在React状态挂钩上运行JavaScript map函数吗?
const [sequenceNames, setSequenceNames] = useState(null);
useEffect(() => {
fetch('/savedFiles')
.then(response => response.json())
.then(data => setSequenceNames(data));
}, []);
const table = sequenceNames.map(name => Sequence(name));
这适用于for in循环,但我的linter禁止使用for in。
const table = [];
for (const name in sequenceNames) {
table.push(Sequence(sequenceNames[name]));
}
当我使用.map时,出现以下错误。
TypeError: Cannot read property 'map' of null
at main.a21158832f7ed8c55e25.bundle.js:1
at Bi (main.a21158832f7ed8c55e25.bundle.js:1)
at main.a21158832f7ed8c55e25.bundle.js:1
at f (main.a21158832f7ed8c55e25.bundle.js:1)
at d (main.a21158832f7ed8c55e25.bundle.js:1)
at main.a21158832f7ed8c55e25.bundle.js:1
即使我的sequenceNames
数组不应为null。
答案 0 :(得分:1)
更改
const table = sequenceNames.map(name => Sequence(name));
收件人
const table = Array.isArray(sequenceNames) && sequenceNames.map(name => Sequence(name));
答案 1 :(得分:1)
您遇到的问题是,您正在设置sequenceNames
null
的初始状态,因此您遇到了竞争状况,这是您第一次尝试在{{ 1}}是sequenceNames
。您可以将null
初始化为一个空数组sequenceNames
,但是完成所需的最佳方法是拥抱钩子。
[]