繁体   English   中英

使用UseEffect ReactJs后清空数据

[英]Empty data after using UseEffect ReactJs

我想获取新闻,但在第一次渲染中我有一个空字典。 我的使用效果

const [news, setNews] = useState({});
const [page, setPage] = useState(1);
const [user, setUser] = useState({});

useEffect(() =>{
    const getNews = async() =>{
        const newsData = await httpClient.get(`/feed/${pk}/?page=${page.toString()}`)
        setNews(newsData.data);
        const userData = await httpClient.get('/profile/')
        setUser(userData)
    }
    getNews();
}, [page])

如何在第一次渲染时获取数据?

因为你在依赖数组中有[page] - 为初始渲染添加钩子:

const [page, setPage] = useState(0);

useEffect(() => setPage(1), [])

您将始终拥有您在第一次渲染时初始化它的 state,反应不会等到 useEffect 在渲染之前完成,因为这会锁定 UI。

在获取数据时您需要某种加载指示器,例如,您可以这样做

const [loading, setLoading] = useState(true);
const [news, setNews] = useState({});
const [page, setPage] = useState(1);
const [user, setUser] = useState({});

useEffect(() =>{
    const getNews = async() =>{
        const newsData = await httpClient.get(`/feed/${pk}/?page=${page.toString()}`)
        setNews(newsData.data);
        const userData = await httpClient.get('/profile/')
        setUser(userData)
        setLoading(false)
    }
    setLoading(true)
    getNews();
}, [page])

if (loading) {
  return <>{"loading"}</>
}

将返回值更改为您想要的任何值,也许您只想返回一个空的<></>组件,这样当它第一次出现时它就会拥有所有数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM