我想创建一个简单的React应用程序,使用setInterval函数每秒更新一个h1元素。我有一个字符串数组,我想每秒从该数组中随机选取一个字符串,并在h1中使用该字符串。但我的代码无法正常工作。h1不是每秒更新,而是每毫秒更新。
import PersonalInfo from './PersonalInfo.js'
import { useState } from 'react';
function App() {
const myPersonalInfo = ['books', 'music', 'code'];
const [state, changeState] = useState(myPersonalInfo[Math.floor(Math.random() * myPersonalInfo.length)]);
setInterval(() => {
changeState(myPersonalInfo[Math.floor(Math.random() * myPersonalInfo.length)]);
}, 2000);
return (
<div className="App">
<PersonalInfo title={state} />
</div>
);
}
export default App;
function PersonalInfo({ title}) {
return <div>
<h1>I Love {title} </h1>
</div>
}
export default PersonalInfo
4条答案
按热度按时间q43xntqr1#
使用useEffect挂钩
vlju58qv2#
使用React使用效果
具有空依赖项的useEffect仅在第一次渲染时运行
clear interval组件卸载
f2uvfpb93#
使用useEffect并将state设置为依赖项。
deyfvvtc4#
您可能希望使用
useEffect
和一个空的dependencies数组,以确保设置间隔的代码只在挂载时运行一次,否则您将在内存中为每个状态更改创建一个新的间隔,并且您还希望在卸载时清除该间隔。另外,你可以使用一个函数来更新状态,否则,你将在内存中注册一个设置的间隔,该间隔将使用相同的值(第一个随机值)不断更新状态。状态更新器函数确保你在evrytime中使用一个新值来水合间隔。