JSX 中的函式

為了獲得更好的效能,避免在 JSX 中使用陣列(lambda)函式非常重要。

https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md 所述

JSX prop 中的繫結呼叫或箭頭函式將在每個渲染上建立一個全新的函式。這對效能不利,因為它會導致垃圾收集器的呼叫方式超出必要的範圍。如果將全新的函式作為 prop 傳遞給使用對 prop 的引用相等性檢查以確定是否應該更新的元件,它也可能導致不必要的重新呈現。

所以如果有像這樣的 jsx 程式碼塊:

                    <TextInput
                      onChangeValue={  value => this.handleValueChanging(value) }
                    />

要麼

                    <button onClick={ this.handleClick.bind(this) }></button>

你可以做得更好:

                    <TextInput
                      onChangeValue={  this.handleValueChanging }
                    />

                    <button onClick={ this.handleClick }></button>

對於 handleValueChanging 函式中的正確上下文,你可以在元件的建構函式中應用它:

          constructor(){
            this.handleValueChanging = this.handleValueChanging.bind(this)
          }

更多地繫結傳遞給元件的函式

或者你可以使用這樣的解決方案: https//github.com/andreypopp/autobind-decorator ,只需將 @autobind 裝飾器新增到你想要繫結的每個方法:

        @autobind
        handleValueChanging(newValue)
        {
            //processing event
        }