第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么這些功能工作不同?

為什么這些功能工作不同?

慕標(biāo)琳琳 2021-03-29 08:23:51
僅在未卸載組件的情況下,我試圖在設(shè)置API調(diào)用后設(shè)置屬性的狀態(tài)。在第一個(gè)函數(shù)中,變量“ unmount”在函數(shù)“ Component”中初始化。在這種情況下,我會(huì)收到以下警告:“無法在已卸載的組件上執(zhí)行React狀態(tài)更新。這是空操作,但表明您的應(yīng)用程序中存在內(nèi)存泄漏?!痹诘诙€(gè)函數(shù)中,我全局初始化變量“ unmount”,在這種情況下,我沒有收到任何警告。顯示警告:function Component() {  const [emailSent, setEmailSent] = useState(false);  var unmounted = false;  async function handleClickEvent() {  try {   await AuthApi.sendRecoverAccountEmail('123');   !unmounted && setEmailSent(true);  } catch (err) {    !unmounted && setIsSendingEmail(false);  } } useEffect(() => {   return () => {    unmounted = true;   }; }, []);}沒有警告:var unmounted = false;function Component() {const [emailSent, setEmailSent] = useState(false);async function handleSendEmail(formValues) { try {  await AuthApi.sendRecoverAccountEmail('123');  !unmounted && setEmailSent(true); } catch (err) {  !unmounted && setIsSendingEmail(false); }}useEffect(() => {  return () => {   unmounted = true;  }; }, []);}任何人都可以解釋為什么會(huì)這樣嗎?
查看完整描述

2 回答

?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊

在第一個(gè)示例中,unmounted總是false在每次渲染之后。


這是不使用全局實(shí)例的正確方法:


function Component() {

  const [emailSent, setEmailSent] = useState(false);

  const unmounted = useRef(false);


  async function handleSendEmail(formValues) {

    try {

      await AuthApi.sendRecoverAccountEmail('123');

      !unmounted.current && setEmailSent(true);

    } catch (err) {

      !unmounted.current && setIsSendingEmail(false);

    }

  }


  useEffect(() => {

    return () => {

      unmounted.current = true;

    };

  }, []);

}


查看完整回答
反對(duì) 回復(fù) 2021-04-08
?
Qyouu

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊

一個(gè)有趣的問題。您可能會(huì)發(fā)現(xiàn)有關(guān)鉤子的常見問題解答很有用,因?yàn)槲艺J(rèn)為它相當(dāng)具體地解決了您的問題。


在第一個(gè)示例中,卸載的var是組件屬性的一部分,而在第二個(gè)示例中,它只是作為javascript閉包的一部分而獲得的。


通常,您要確保將更改的掛載參數(shù)作為componentDidUnmount生命周期方法的一部分。


我認(rèn)為,如果您將unmount添加到依賴項(xiàng)列表中,可能會(huì)起作用嗎?我通常在Clojurescript中使用另一個(gè)框架的react,所以我并不完全熟悉主要javascript接口的語義,但這至少是為什么您會(huì)收到第一個(gè)示例警告的原因。


在第一個(gè)示例中,如果將最后一部分更改為以下內(nèi)容,會(huì)發(fā)生什么?


useEffect(() => {

  return () => {

   unmounted = true;

  };

 }, [unmounted]);

}

您可能需要將unmount定義為更正式的react屬性,而不僅僅是組件中包含的屬性。


查看完整回答
反對(duì) 回復(fù) 2021-04-08
  • 2 回答
  • 0 關(guān)注
  • 206 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)