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

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:20:57
字體:
來源:轉載
供稿:網友

在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>  ); }}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 洛宁县| 南召县| 潢川县| 潍坊市| 长岭县| 巢湖市| 崇州市| 同江市| 张北县| 同心县| 冀州市| 乌拉特中旗| 镇赉县| 房山区| 咸阳市| 石首市| 娱乐| 郸城县| 米脂县| 大洼县| 宜春市| 娱乐| 邵阳县| 精河县| 泰兴市| 贡嘎县| 乌鲁木齐县| 福泉市| 罗江县| 乌苏市| 朝阳县| 酉阳| 长汀县| 兴安盟| 新绛县| 广元市| 益阳市| 弥勒县| 宝山区| 青州市| 兰州市|