博客 / 詳情

返回

this 指向踩坑總結

一. vue 中使用回調函數使用 this 無效

踩坑場景:vue 實例中綁定 data 的 this 無效
解決方式:

  1. 使用箭頭函數解決
  2. let self = this

二. react 中使用回調函數使用 this 無效

踩坑場景:react 內部組件調用時傳入函數參數時,this 指向不對導致函數執行時機不對
解決方式:在函數傳參時使用箭頭函數(也有別的方法,不過此種最方便)

三. setTimeout 使用 this 失效

踩坑場景:vue,小程序
解決方式:

  1. setTimeout 內使用箭頭函數
  2. let self = this

四. mobx 使用 this 失效

解決辦法:
1.在 this 調用的當前函數中使用 @action.bound

官網原文:
action 裝飾器/函數遵循 javascript 中標準的綁定規則。 但是,action.bound 可以用來自動地將動作綁定到目標對象。 注意,與 action 不同的是,(@)action.bound 不需要一個name參數,名稱將始終基於動作綁定的屬性
注: action.bound 不要和箭頭函數一起使用;箭頭函數已經是綁定過的並且不能重新綁定

class Ticker {
    @observable tick = 0

    @action.bound
    increment() {
        this.tick++ // 'this' 永遠都是正確的
    }
}

const ticker = new Ticker()
setInterval(ticker.increment, 1000)
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.