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

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

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

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

先來個(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ì)遇到問題: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的指向
不過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的作用域問題并傳參的文章就介紹到這了,更多相關(guān)React綁定this作用域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

    React組件分為函數(shù)組件與class組件;函數(shù)組件是無狀態(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è)參考。一起跟隨小編過來看看吧
    2018-01-01
  • react實(shí)現(xiàn)移動(dòng)端二級(jí)路由嵌套詳解

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

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

    React使用公共文件夾public問題

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

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

    今天帶來大家學(xué)習(xí)react-diagram 序列化Json解讀的相關(guān)知識(shí),本文通過多種案例給大家分析序列化知識(shí),通過圖文并茂的形式給大家介紹的非常詳細(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)資料,文中通過實(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)論

清涧县| 沙湾县| 壤塘县| 青田县| 泸溪县| 云南省| 库尔勒市| 运城市| 集安市| 大同县| 正定县| 宜良县| 华安县| 台州市| 水城县| 水富县| 南岸区| 项城市| 呼图壁县| 宿州市| 长治县| 郧西县| 宕昌县| 施秉县| 涪陵区| 吴桥县| 策勒县| 屯留县| 永年县| 靖远县| 赤壁市| 巴马| 九台市| 凤阳县| 庆安县| 冕宁县| 美姑县| 大港区| 西藏| 民权县| 舒城县|