React中this值繫結和事件函式傳參

2021-09-11 14:02:53 字數 2145 閱讀 1924

react中也有this值的繫結問題,接下來將介紹五種繫結模式。

如果你使用react.createclass來建立元件,那麼react會自動把函式中的this值指向元件例項。

react.createclass(;

},handlechange: function(event) );

},render: function()

value= />

div>)}

})複製**

上面的例子中inputonchange處理函式直接指向了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...