react中也有this
值的繫結問題,接下來將介紹五種繫結模式。
如果你使用react.createclass
來建立元件,那麼react會自動把函式中的this
值指向元件例項。
react.createclass(;
},handlechange: function(event) );
},render: function()
value= />
div>)}
})複製**
上面的例子中input
的onchange
處理函式直接指向了handlechange
方法,在使用react.createclass
方法建立元件中這是可行的。
要注意的是,react.createclass
在react 16.0.0 版本中就從核心包移除出去了,要從 create-react-class 中獲取。
同時官方是推薦使用 es6 類語法來進行元件的定義,所以這個this
值的繫結方法是不推薦的。
通常我們都是使用 es6 類語法來進行元件的定義,此時 react 並不會自動繫結this
值。一種解決方法是在render
函式中進行this
值繫結:
onchange=
複製**
這種方法簡明清晰,但是對效能會有些影響,因為每次渲染時都會使用bind
方法建立乙個新函式。
這個方法和使用bind
函式有些類似,你可以在render
中使用箭頭函式來保證this
值是指向元件例項的。
onchange=
複製**
同樣的這種方法也是對效能有影響的,箭頭函式每次渲染時都要重新建立。
在建構函式中進行this
值的繫結應該是大多數人在使用的,它避免了每次渲染時都要重新建立事件方法。
constructor(props)
複製**
但是有時方法比較多的情況下,建構函式中充滿了繫結方法,顯得很冗長。
這種語法還在提案階段,你可以使用transform-class-properties 或者 babel 中的 stage-2 來完成轉碼。
handlechange = () =>
複製**
箭頭函式的this
中是指向外層作用域中this
值的。所以這個方法中this
值總是指向元件例項的,同時它也不會也上邊提到的效能問題。所以說推薦使用這種方法來處理this
的繫結。
講完了this
值的繫結,接下來快速討論下事件函式的傳參問題。
複製**
這邊提一下,event
物件也會在你的傳輸後面預設傳入。
this.handlesort(column, event)}>
複製**
handlesort(event)
複製**
抽離出乙個子元件,這樣可以避免渲染時一直重新建立事件函式導致的效能問題。
首先主模組:
onheaderclick=
/>
))}複製**
子元件:
class
tableheader
extends
component
render() >
th>
);}}
複製**
子元件繼承purecomponent
只會在props
發生改變時才會重新渲染(自動淺比較)。
這個最佳實踐在eslint-plugin-react
中也是有的,所以推薦寫**時開啟eslint。
React中繫結事件
1.事件的名稱都是react提供的,因此名稱的首字母必須大寫 onclick onmouseover 2.為事件提供的處理函式必須是如下格式 onclick 3.用的最多的事件繫結形式為 this.show 傳參 按鈕 show arg1 例如 import react from react exp...
React 響應式設計和事件繫結
總 import react,from react class extends component this handleinputchange this handleinputchange.bind this render onchange fragment handleinputchange e...
react中如何修改state值
根據state型別 更新 當狀態發生變化時,如何建立新的狀態?根據狀態的型別,可以分成三種情況 1 狀態的型別是不可變型別 數字,字串,布林值,null,undefined 這種情況最簡單,直接給要修改的狀態賦乙個新值即可 原state this state 改變state this setstat...