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

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

使用 React Hooks,使用“useState”和“useEffect”

使用 React Hooks,使用“useState”和“useEffect”

慕雪6442864 2023-03-24 15:25:59
我想做什么?通過 React Hooks渲染characterInfo到前端。當前嘗試執行此操作的代碼是什么?呈現信息的前端組件:export default function ReactComponent() {  const [characterInfo, setCharacterInfo] = useState([]);  useEffect(() => {    socket.emit("/character/read");    socket.on("/character/read", function (data) {      if (data.status === "SUCCESS") {        setCharacterInfo(data)      }    });    return () => {      socket.off("/character/read");    };  }, []);  return (    <div>      {characterInfo.models[0].name}    </div>  )}后端.json信息作為“數據”以及保存到的characterInfo內容setCharacterInfo:{  status: "SUCCESS"  models: [    {       name: "AC",      element: "Air",    }    {      name: "Irene",      element: "Fire",    }  ]}(所以在這種情況下訪問“AC”,它將是characterInfo.models[0].name)我期望結果是什么?我希望只是AC被渲染。實際結果如何?我會得到這個錯誤:TypeError: Cannot read property '0' of undefined我認為問題可能是什么?我認為它必須處理異步平衡,尤其是useEffect(). 我認為前端會在setCharacterInfo決定設置任何內容之前嘗試渲染。
查看完整描述

2 回答

?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

我認為前端會在 setCharacterInfo 決定甚至設置任何內容之前嘗試渲染。


沒錯,您的組件useState在函數useEffect運行之前使用默認值渲染一次。下面是組件掛載、更新和卸載時的執行順序圖(注意render發生在 之前useEffect):


https://raw.githubusercontent.com/donavon/hook-flow/master/hook-flow.png


characterInfo.models在訪問name.


  return (

    <div>

      {

        characterInfo.models &&

        characterInfo.models.length &&

        characterInfo.models[0].name

      }

    </div>

  )

或者,如果您使用可選鏈接:


  return (

    <div>

      {characterInfo?.models[0]?.name}

    </div>

  )

另一個注意事項 - 您將 的初始值設置characterInfo為一個空數組。如果將它設為一個空對象,就會更清楚地表明您希望它data是一個對象,而不是數組。


const [characterInfo, setCharacterInfo] = useState({});


查看完整回答
反對 回復 2023-03-24
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

您可以將返回語句調整為僅在名稱存在時呈現名稱


return (

    <div>

      {characterInfo.length && characterInfo.models[0].name}

    </div>

  )


查看完整回答
反對 回復 2023-03-24
  • 2 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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