Reactjs - 使用功能组件启动应用程序时调用函数
Reactjs - Call function on startup of application with a functional component
我的应用程序会根据一天中的不同时间显示 “早安” 等问候语。我有一个功能可以检查时间并根据现在的时间更改问候语。我不能使用 componentDidMount
,因为它是一个功能组件,所以我使用 React.useEffect
。问题是这不会 运行 在启动时,应用程序显示“早安”然后会更改为 “下午好” 时会有一小段延迟。我怎样才能消除这个延迟。
根据时间判断问候语的函数
const [currGreeting, setCurrGreeting] = useState(greetings[0]);
//Involves saving to localStorage so the transition can be seamless if the app is exited and returned to
function updateGreeting(){
time = new Date();
let hour = time.getHours();
console.log(hour);
if(12 > hour && hour > 5){
setCurrGreeting(greetings[0]);
console.log("Good Morning")
const curSessionGreeting = JSON.parse(localStorage.getItem("sessionGreeting")) || [];
if(curSessionGreeting != currGreeting){
localStorage.setItem("sessionGreeting", JSON.stringify(greetings[0]));
setCurrGreeting(greetings[0]);
}
}
if((18 > hour && hour > 12) || hour === 12){
setCurrGreeting(greetings[1]);
console.log("Good Afternoon")
const curSessionGreeting = JSON.parse(localStorage.getItem("sessionGreeting")) || [];
if(curSessionGreeting != currGreeting){
localStorage.setItem("sessionGreeting", JSON.stringify(greetings[1]));
setCurrGreeting(greetings[1]);
}
}
if(hour > 18 || (5 > hour && hour > 0)){
setCurrGreeting(greetings[2]);
console.log("Good Evening")
const curSessionGreeting = JSON.parse(localStorage.getItem("sessionGreeting")) || [];
if(curSessionGreeting != currGreeting){
localStorage.setItem("sessionGreeting", JSON.stringify(greetings[2]));
setCurrGreeting(greetings[2]);
}
}
}
更新问候语
React.useEffect(() => {
setInterval(()=>updateGreeting(), 1000);
});
应用呈现的位置
return (
<div>
<div style = {{display: 'flex', fontFamily: 'Work Sans', fontSize: 25,marginBottom: 25, color: '#CDCACA'}}>
<text>{currGreeting}</text>
</div>
</div>
);
};
export default App;
你应该在执行 setInterval
之前 运行 一个 updateGreeting
因为这会延迟第一次 updateGreeting
执行一秒钟 1000ms
它异步执行:
React.useEffect(() => {
updateGreeting()//first execution
setInterval(()=>updateGreeting(), 1000);
},[]);
我的应用程序会根据一天中的不同时间显示 “早安” 等问候语。我有一个功能可以检查时间并根据现在的时间更改问候语。我不能使用 componentDidMount
,因为它是一个功能组件,所以我使用 React.useEffect
。问题是这不会 运行 在启动时,应用程序显示“早安”然后会更改为 “下午好” 时会有一小段延迟。我怎样才能消除这个延迟。
根据时间判断问候语的函数
const [currGreeting, setCurrGreeting] = useState(greetings[0]);
//Involves saving to localStorage so the transition can be seamless if the app is exited and returned to
function updateGreeting(){
time = new Date();
let hour = time.getHours();
console.log(hour);
if(12 > hour && hour > 5){
setCurrGreeting(greetings[0]);
console.log("Good Morning")
const curSessionGreeting = JSON.parse(localStorage.getItem("sessionGreeting")) || [];
if(curSessionGreeting != currGreeting){
localStorage.setItem("sessionGreeting", JSON.stringify(greetings[0]));
setCurrGreeting(greetings[0]);
}
}
if((18 > hour && hour > 12) || hour === 12){
setCurrGreeting(greetings[1]);
console.log("Good Afternoon")
const curSessionGreeting = JSON.parse(localStorage.getItem("sessionGreeting")) || [];
if(curSessionGreeting != currGreeting){
localStorage.setItem("sessionGreeting", JSON.stringify(greetings[1]));
setCurrGreeting(greetings[1]);
}
}
if(hour > 18 || (5 > hour && hour > 0)){
setCurrGreeting(greetings[2]);
console.log("Good Evening")
const curSessionGreeting = JSON.parse(localStorage.getItem("sessionGreeting")) || [];
if(curSessionGreeting != currGreeting){
localStorage.setItem("sessionGreeting", JSON.stringify(greetings[2]));
setCurrGreeting(greetings[2]);
}
}
}
更新问候语
React.useEffect(() => {
setInterval(()=>updateGreeting(), 1000);
});
应用呈现的位置
return (
<div>
<div style = {{display: 'flex', fontFamily: 'Work Sans', fontSize: 25,marginBottom: 25, color: '#CDCACA'}}>
<text>{currGreeting}</text>
</div>
</div>
);
};
export default App;
你应该在执行 setInterval
之前 运行 一个 updateGreeting
因为这会延迟第一次 updateGreeting
执行一秒钟 1000ms
它异步执行:
React.useEffect(() => {
updateGreeting()//first execution
setInterval(()=>updateGreeting(), 1000);
},[]);