最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解三種方式在React中解決綁定this的作用域問(wèn)題并傳參

 更新時(shí)間:2020年08月18日 11:19:42   作者:Piconjo_Official  
這篇文章主要介紹了詳解三種方式在React中解決綁定this的作用域問(wèn)題并傳參,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在React中時(shí)常會(huì)遇到this指向的作用域問(wèn)題 從而導(dǎo)致undefined報(bào)錯(cuò)

先來(lái)個(gè)Demo:
功能很簡(jiǎn)單 點(diǎn)擊按鈕改變文字

import React from 'react';

export default class BindWithThis extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      msg:"BindWithThis"
    }
  }

  render() { 
    return <div>
      <input type="button" value="Way1" onClick={this.changeMsg1}/>
      <hr/>
      <h3>{this.state.msg}</h3>
    </div>
  }

  changeMsg1(){
    console.log(this)
    this.setState({
      msg:"Way1"
    })
  }
}

但會(huì)遇到問(wèn)題:Cannot read property ‘setState' of undefined


這是因?yàn)?在changeMsg1方法內(nèi)部的this指向的并不是外面的組件 因而根本就不會(huì)有setState()方法了 自然會(huì)報(bào)錯(cuò)

為此 有三種解決方法

方式一:在事件處理函數(shù)中使用.bind()

只要這樣即可:

render() { 
    return <div>
      <input type="button" value="Way1" onClick={this.changeMsg1.bind(this)}/>
      <hr/>
      <h3>{this.state.msg}</h3>
    </div>
  }

bind()的作用是為前面的函數(shù)修改函數(shù)內(nèi)部的this的指向 從而使得函數(shù)內(nèi)部的this指向bind中的第一個(gè)參數(shù)

bind()還可以傳值:
bind第一個(gè)參數(shù)后面的所有參數(shù)都會(huì)作為調(diào)用bind前面的函數(shù)的參數(shù)傳遞

render() { 
  return <div>
    <input type="button" value="Way1" onClick={this.changeMsg1.bind(this,"壹","貳")}/>
    <hr/>
    <h3>{this.state.msg}</h3>
  </div>
}

changeMsg1(arg1,arg2){
  this.setState({
    msg:"Way1"+arg1+arg2
  })
}

除了bind()之外 還有call()和apply() 它們都能改變函數(shù)內(nèi)部的this的指向
不過(guò)bind()和call()/apply()的區(qū)別是:bind()并不會(huì)立即調(diào)用 而call()/apply()會(huì)立即調(diào)用

方式二:在構(gòu)造函數(shù)中使用.bind()

當(dāng)為一個(gè)函數(shù)調(diào)用bind 從而改變this的指向之后 bind函數(shù)的返回值是這個(gè)被改變this指向的函數(shù)的改變后的引用
bind并不會(huì)修改原函數(shù)的this的指向 而是返回一個(gè)修改后的函數(shù)的指向 因此需要重新接收方可生效

import React from 'react';

export default class BindWithThis extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      msg:"BindWithThis"
    }

    // 當(dāng)為一個(gè)函數(shù)調(diào)用bind 改變this的指向之后 bind函數(shù)的返回值是這個(gè)被改變this指向的函數(shù)的改變后的引用 因此需要重新接收
    this.changeMsg2 = this.changeMsg2.bind(this,"壹","貳")
  }

  render() { 
    return <div>
      <input type="button" value="Way2" onClick={this.changeMsg2}/>
      <hr/>
      <h3>{this.state.msg}</h3>
    </div>
  }

  changeMsg2(arg1,arg2){
    this.setState({
      msg:"Way2"+arg1+arg2
    })
  }
}

方式三:使用箭頭函數(shù)

利用了箭頭函數(shù)的特性:箭頭函數(shù)內(nèi)部的this永遠(yuǎn)指向調(diào)用者方的this

render() { 
  return <div>
    <input type="button" value="Way3" onClick={() => {this.changeMsg3("壹","貳")}}/>
    <hr/>
    <h3>{this.state.msg}</h3>
  </div>
}

changeMsg3 = (arg1,arg2) => {
  this.setState({
    msg:"Way3"+arg1+arg2
  })
}

當(dāng)然 更推薦使用更加方便的箭頭函數(shù)

到此這篇關(guān)于詳解三種方式在React中解決綁定this的作用域問(wèn)題并傳參的文章就介紹到這了,更多相關(guān)React綁定this作用域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • react 頁(yè)面加載完成后自動(dòng)執(zhí)行標(biāo)簽的點(diǎn)擊事件的兩種操作方法

    react 頁(yè)面加載完成后自動(dòng)執(zhí)行標(biāo)簽的點(diǎn)擊事件的兩種操作方法

    這篇文章主要介紹了react 頁(yè)面加載完成后自動(dòng)執(zhí)行標(biāo)簽的點(diǎn)擊事件,本文給大家分享兩種操作方法結(jié)合示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • React深入分析更新的創(chuàng)建源碼

    React深入分析更新的創(chuàng)建源碼

    React組件分為函數(shù)組件與class組件;函數(shù)組件是無(wú)狀態(tài)組件,class稱為類組件;函數(shù)組件只有props,沒有自己的私有數(shù)據(jù)和生命周期函數(shù);class組件有自己私有數(shù)據(jù)(this.state)和生命周期函數(shù)
    2023-01-01
  • React事件節(jié)流效果失效的原因及解決

    React事件節(jié)流效果失效的原因及解決

    這篇文章主要介紹了React事件節(jié)流效果失效的原因及解決,幫助大家更好的理解和學(xué)習(xí)使用React框架,感興趣的朋友可以了解下
    2021-04-04
  • 詳解如何在React組件“外”使用父組件的Props

    詳解如何在React組件“外”使用父組件的Props

    這篇文章主要介紹了詳解如何在React組件“外”使用父組件的Props,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • react實(shí)現(xiàn)移動(dòng)端二級(jí)路由嵌套詳解

    react實(shí)現(xiàn)移動(dòng)端二級(jí)路由嵌套詳解

    這篇文章主要介紹了react移動(dòng)端二級(jí)路由嵌套的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • React使用公共文件夾public問(wèn)題

    React使用公共文件夾public問(wèn)題

    這篇文章主要介紹了React使用公共文件夾public問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • react-diagram 序列化Json解讀案例分析

    react-diagram 序列化Json解讀案例分析

    今天帶來(lái)大家學(xué)習(xí)react-diagram 序列化Json解讀的相關(guān)知識(shí),本文通過(guò)多種案例給大家分析序列化知識(shí),通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2021-05-05
  • JavaScript中React面向組件編程(上)

    JavaScript中React面向組件編程(上)

    本文主要介紹了React組件中默認(rèn)封裝了很多屬性,有的是提供給開發(fā)者操作的,其中有三個(gè)屬性非常重要:state、props、refs。感興趣的小伙伴可以參考閱讀
    2023-03-03
  • React函數(shù)組件與類的區(qū)別有哪些

    React函數(shù)組件與類的區(qū)別有哪些

    函數(shù)式組件的基本意義就是,組件實(shí)際上是一個(gè)函數(shù),不是類,下面這篇文章主要給大家介紹了關(guān)于React中函數(shù)組件與類的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • react-router-dom?v6?使用詳細(xì)示例

    react-router-dom?v6?使用詳細(xì)示例

    這篇文章主要介紹了react-router-dom?v6使用詳細(xì)示例,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-09-09

最新評(píng)論

电白县| 巩留县| 新营市| 黄冈市| 城步| 涡阳县| 枣阳市| 石首市| 弋阳县| 华安县| 扶沟县| 绥芬河市| 保山市| 渝北区| 津市市| 宜良县| 济宁市| 锡林浩特市| 孟连| 民丰县| 五指山市| 永川市| 宁阳县| 阿荣旗| 彭山县| 兰西县| 鹤庆县| 上杭县| 连南| 洪湖市| 嘉义市| 富顺县| 曲阳县| 高要市| 保亭| 越西县| 崇仁县| 凤翔县| 临泉县| 吉木萨尔县| 怀仁县|