【发布时间】:2022-01-06 04:28:25
【问题描述】:
首先,我会说我对反应很陌生。
我正在从 firebase 获取数据并随机更改屏幕上 setInterval 中的数据。发生了一些我不明白的事情,所以我想问一下。
-
对区间和
useEffect的工作原理有疑问。在 useEffect 内部没有依赖关系,因此useEffect仅在第一次执行。当useEffect只工作一次时,间隔内的函数如何在每隔几秒后工作?我认为区间函数在useEffect,useEffect内部应该执行才能运行区间函数。 -
当我在
setInterval中将时间设置为 1000 时,反应说current_quote状态未定义,但是当我将其设置为 2000 或更大时一切都很好。为什么? -
返回 useEffect 的回调函数。我知道它每次都会在下一次渲染之前运行,以清除上一次渲染的间隔,但是当我在内部控制台返回时,为什么它不执行?
import db from '../components/db'
import {useState,useEffect} from 'react'
const Home = ()=>{
const [current_quote,set_current_quote] = useState({});
const [isloaded, set_loaded]= useState(false)
let arr_data=[];
useEffect(()=>{
// fetching data from database
db.collection("data").get().then((querySnapshot) => {
querySnapshot.forEach(element => {
var data = element.data();
arr_data.push(data);
})
})
const interval = setInterval(()=>{ // randomly changing state
set_current_quote(arr_data[Math.floor(Math.random()*(arr_data.length))])
set_loaded(true);
},1000)
return ()=>{
clearInterval(interval)
}
},[])
return (
<div>
<h1>{ isloaded && current_quote.Quote} </h1> // displaying random data
<h4>{ isloaded && current_quote.Author}</h4>
</div>
)}
export default Home;
【问题讨论】:
-
这是一个问答网站。请注意,question 是单数,而不是复数。它不是一个编号的问题列表网站。如果您有多个问题,则需要创建单独的帖子来提问。
标签: reactjs