亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

React:實現一個鉤子來獲取數據并返回加載狀態

React:實現一個鉤子來獲取數據并返回加載狀態

慕哥9229398 2021-10-14 15:43:30
我正在嘗試實現一個鉤子 ( useFetch(route, dependencies=[])),它將用于fetch數據并返回一個標量值,loading用于確定用戶當前是否正在獲取新數據。這在初始渲染時按預期工作(因為默認狀態為loadingtrue)。每次后續渲染都會出現此問題。由于loading當前狀態設置為false(在初始渲染之后),loading狀態將在額外的渲染周期內保持 false 狀態,然后在useEffect().如何防止額外的loading=false渲染周期,以便我使用它的組件useFetch()立即意識到當前正在獲取數據并且我可以'...loading'在其中顯示文本render()(無需渲染兩次即可到達這一點)。使用獲取function useFetch(route, successHandler, dependencies = []) {    const [loading, setLoading] = useState(true);    useEffect(() => {        setLoading(true);        fetch(route,            {                method: 'POST',                body: JSON.stringify({}),                headers: {"Content-Type": "application/json"}            })            .then(res => res.json())            .then(                () => {                  // Set state data from component here                   successHandler();                },                 () => {/*...*/})            .finally(() => {                setLoading(false);            });    }, dependencies);    return loading;}成分function Component(){  const [toggle, setToggle] = useState(false);  const [options, setOptions] = useState({});  const loading = useFetch('endpoint',     () => setOptions({foo: 'bar'}),     [toggle]);  return <div>    <button onClick={()=>{setToggle(!toggle)}}>Trigger useFetch()</button>    {loading ? '...loading': options.foo}  </div>;}任何幫助或設計建議將不勝感激,
查看完整描述

1 回答

?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

你的代碼有兩個錯誤:


const loading = useFetch('endpoint', 

    () => setOptions({foo: 'bar'}), 

    [toggle]);

依賴數組應該是在 中使用的變量useEffect,在你的情況下它可以是[route]

[toggle]作為依賴參數將發送[false]或[true],具體取決于您的狀態變量。這將不受您創建的鉤子的 useEffect 的控制。

看看這個例子,它可能會幫助你更好地理解:


查看完整回答
反對 回復 2021-10-14
  • 1 回答
  • 0 關注
  • 236 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號