栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

对useEffect中的异步函数的React Hook警告:useEffect函数必须返回清除函数,否则不返回任何内容

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

对useEffect中的异步函数的React Hook警告:useEffect函数必须返回清除函数,否则不返回任何内容

我建议在这里看看Dan
Abramov(React核心维护者之一)的答案

我认为您正在使它变得比所需的更加复杂。

function Example() {  const [data, dataSet] = useState<any>(null)  useEffect(() => {    async function fetchMyAPI() {      let response = await fetch('api/data')      response = await response.json()      dataSet(response)    }    fetchMyAPI()  }, [])  return <div>{JSON.stringify(data)}</div>}

从长远来看,我们会阻止这种模式,因为它会鼓励比赛条件。例如-
在通话开始和结束之间可能会发生任何事情,并且您可能会获得新的道具。相反,我们建议使用Suspense进行数据提取,看起来更像

const response = MyAPIResource.read();

并没有影响。但是与此同时,您可以将异步内容移到一个单独的函数中并进行调用。

您可以在此处阅读更多有关实验性悬念的信息。


如果要在eslint之外使用函数。

 function OutsideUsageExample() {  const [data, dataSet] = useState<any>(null)  const fetchMyAPI = useCallback(async () => {    let response = await fetch('api/data')    response = await response.json()    dataSet(response)  }, [])  useEffect(() => {    fetchMyAPI()  }, [fetchMyAPI])  return (    <div>      <div>data: {JSON.stringify(data)}</div>      <div>        <button onClick={fetchMyAPI}>manual fetch</button>      </div>    </div>  )}

与useCallback useCallback一起使用。沙盒。

import React, { useState, useEffect, useCallback } from "react";export default function App() {  const [counter, setCounter] = useState(1);  // if counter is changed, than fn will be updated with new counter value  const fn = useCallback(() => {    setCounter(counter + 1);  }, [counter]);  // if counter is changed, than fn will not be updated and counter will be always 1 inside fn    // if fn or counter is changed, than useEffect will rerun  useEffect(() => {    if (!(counter % 2)) return; // this will stop the loop if counter is not even    fn();  }, [fn, counter]);  // this will be infinite loop because fn is always changing with new counter value    return (    <div>      <div>Counter is {counter}</div>      <button onClick={fn}>add +1 count</button>    </div>  );}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/409772.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号