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

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

無法擺脫:警告:無法對未安裝的組件執行 React 狀態更新

無法擺脫:警告:無法對未安裝的組件執行 React 狀態更新

江戶川亂折騰 2023-05-25 16:12:08
完整警告消息:警告:無法對未安裝的組件執行 React 狀態更新。這是一個空操作,但它表明您的應用程序中存在內存泄漏。要修復,請在 useEffect 清理函數中取消所有訂閱和異步任務。此警告不會持續顯示,它會在需要時顯示。大多數情況下,應用程序剛啟動時。export default class something extends React.Component {  _isMounted = false;  state = {      };componentDidMount() {    this._isMounted = true;    firebase = new Fire((error, user) => {      if (error) {        return alert('something something something something');      }      firebase.getLists((lists) => {        this.setState({ lists, user }, () => {            this.setState({ loading: false });        });      });      this.setState({ user });    });  }componentWillUnmount() {    this._isMounted = true;    firebase.detach();  }這是在另一個包含所有 firebase 代碼的文件中detach() {    this.unsubscribe();  }我猜這與分離 firebase.detach 有關
查看完整描述

1 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

您的代碼需要進行一些小的更新才能正常工作。


您需要在更新任何狀態變量之前檢查是否_isMounted是。true


您還需要設置_isMounted=falseincomponentWillUnmount()而不是_isMounted=true.


請參閱下面的更新代碼:


export default class something extends React.Component {

  _isMounted = false;

  state = {

    

  };


componentDidMount() {

    this._isMounted = true;

    firebase = new Fire((error, user) => {

      if (error) {

        return alert('something something something something');

      }


      firebase.getLists((lists) => {

        if (this._isMounted){

          this.setState({ lists, user }, () => {

            this.setState({ loading: false });

          });

        }

      });

      if (this._isMounted){

        this.setState({ user });

      }

    });

  }


componentWillUnmount() {

    this._isMounted = false;

    firebase.detach();

  }


查看完整回答
反對 回復 2023-05-25
  • 1 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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