国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

詳解react關于事件綁定this的四種方式

2024-05-06 16:42:55
字體:
來源:轉載
供稿:網友

react組件中,每個方法的上下文都會指向該組件的實例,即自動綁定this為當前組件,而且react還會對這種引用進行緩存,以達到cpu和內存的最大化。在使用了es6 class或者純函數時,這種自動綁定就不復存在了,我們需要手動實現this的綁定

React事件綁定類似于DOM事件綁定,區別如下:

1.React事件的用駝峰法命名,DOM事件事件命名是小寫

2.通過jsx,傳遞一個函數作為event handler,而不是一個字符串。

3.React事件不能通過返回false來阻止默認事件,需要顯式調用preventDefault()

如下實例:

<a href="#" onclick="console.log('The link was clicked.'); return false">Click me</a>class ActionLink extends React.Component {constructor(props) {super(props);}handleClick(e) {e.preventDefault();console.log('The link was clicked.');}render() {return (<a href="#" onClick={this.handleClick.bind(this)}>Click Me...</a>);}}

ps:React組件類的方法沒有默認綁定this到組件實例,需要手動綁定。

以下是幾種綁定的方法:

bind方法

直接綁定是bind(this)來綁定,但是這樣帶來的問題是每一次渲染是都會重新綁定一次bind;

class Home extends React.Component { constructor(props) {  super(props);  this.state = {  }; } del(){  console.log('del') } render() {  return (   <div className="home">    <span onClick={this.del.bind(this)}></span>   </div>  ); }}

構造函數內綁定

在構造函數 constructor 內綁定this,好處是僅需要綁定一次,避免每次渲染時都要重新綁定,函數在別處復用時也無需再次綁定

class Home extends React.Component { constructor(props) {  super(props);  this.state = {  };  this.del=this.del.bind(this) } del(){  console.log('del') } render() {  return (   <div className="home">    <span onClick={this.del}></span>   </div>  ); }}

::不能傳參

如果不傳參數使用雙冒號也是可以

class Home extends React.Component { constructor(props) {  super(props);  this.state = {  }; } del(){  console.log('del') } render() {  return (   <div className="home">    <span onClick={::this.del}></span>   </div>  ); }}

箭頭函數綁定

箭頭函數不僅是函數的'語法糖',它還自動綁定了定義此函數作用域的this,因為我們不需要再對它們進行bind方法:

class Home extends React.Component { constructor(props) {  super(props);  this.state = {  }; } del=()=>{  console.log('del') } render() {  return (   <div className="home">    <span onClick={this.del}></span>   </div>  ); }}

以上幾種方法都可以實現this綁定,使用那種各自的習慣;希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涞源县| 华阴市| 札达县| 卢龙县| 本溪| 泰顺县| 江山市| 镇巴县| 南雄市| 宝丰县| 门源| 资中县| 长子县| 湘阴县| 神木县| 伊金霍洛旗| 新建县| 沂南县| 九江县| 左权县| 苗栗市| 独山县| 凤庆县| 沙坪坝区| 武山县| 大竹县| 揭东县| 三明市| 白玉县| 北京市| 察隅县| 南皮县| 远安县| 武山县| 河津市| 河北区| 合山市| 兴宁市| 通海县| 闽清县| 旬邑县|