3 回答
TA贡献1856条经验 获得超17个赞
问题是:
因为 itemId 是相同的所有 , 单个值正在与所有<Item><Item>
哪个是索引,并且是所有idx<Item>
const [letters, setLetters] = useState([]);
const [itemId, setItemId] = useState(null);
const handleItemClick = id => {
letters[letters.length - 1] === "H"
? setLetters([...letters, "L"])
: setLetters([...letters, "H"]);
setItemId(id); // <---- itemId is being set from here
};
{[...Array(9)].map((_, idx) => { // <----- idx coming from here, and is index
return (
<Item
letters={letters}
handleItemClick={handleItemClick}
id={idx} // <--- this is index, comes diff for all item
itemId={itemId} // <--- you are passing same value for all item
/>
);
})}
您可以将 Item 组件替换为下面的一个组件,并选中两个值
const Item = ({ letters, id, itemId, handleItemClick }) => {
return <li onClick={() => handleItemClick(id)}>idx : {idx} and item Id : {itemId} ---> {letters[itemId]}</li>;
};
TA贡献1848条经验 获得超6个赞
原因是因为是一个固定的数字(例如 ),并且在整个循环中,at 的值是相同的。然而,设置为 9 计数循环的电流,因此对于每个 .itemId3letters[3]ididxItem
const data = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const currentItemId = 0;
// Logs `1` 9 times
[...Array(9)].forEach((_, idx) => console.log(data[currentItemId])
// Logs `1` through `9`
[...Array(9)].forEach((_, idx) => console.log(data[idx])
TA贡献1804条经验 获得超2个赞
可能是由于此任务,您遇到了这种意外行为。您可能需要使用相等或严格相等运算符letters[letters.length - 1] = 'H'letters[letters.length - 1] === 'H'
添加回答
举报
