我正在处理的例子是:我有一个要Map的数组。对于数组的每个索引,一个组件将被显示,然后在x次之后,它将被替换为不同的组件(永久)。
const Parent = ({ array }) => {
const [isVisible, setIsVisible] = useState(true);
setTimeout(() => {
setIsVisible(false);
}, 1000);
return array.map((item, index) => {
return (
<div key={index}>
{isVisible && <Child>{item}</Child>}
{!isVisible && <Child2>{item}</Child2>}
</div>
)
})
}
上面的代码在第一个索引处按预期工作。状态更改后,后面的数组项不会“切换”组件。只有第二个组件被呈现(因为!isVisible为true)。
有没有办法为这个动态数组的每个索引都设置一个状态变量?
2条答案
按热度按时间8wtpewkr1#
你应该在useEffect中执行setTimeout,否则它会运行每个渲染。
为了回答你的问题,是的,你可以把它放在自己的组件中,以简化它的逻辑。这让每个元素管理自己的计时器,而不是父元素管理所有其子元素。这只适用于简单的情况。如果你想要更复杂的东西,例如,每个子元素在最后一个子元素之后一秒可见,父代将需要通过forwardProps或props或广播事件来进行一些管理。
bmp9r5qi2#
您可以将逻辑提取到单独的组件中。
工作示例: