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

React中綁定this并給函數(shù)傳參的三種方式

 更新時間:2025年07月02日 08:56:26   作者:編程的一拳超人  
React中定義一個組件,可以通過ES6版本以前的React.createClass或者ES6的class xxx extends React.Component,綁定this是react中非常重要的一部分,React中,綁定this的方式有多種,下面一一看看怎么進(jìn)行this綁定并給函數(shù)傳參,需要的朋友可以參考下

前言

我們先來看下面這段代碼:

components/MyComponent.jsx

import React from "react";

export default class MyComponent extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      msg: "這是 MyComponent 組件 默認(rèn)的msg"
    };
  }

  render() {
    return (
      <div>
        <h1>綁定This并傳參</h1>
        <input type="button" value="綁定this并傳參" onClick={this.changeMsg} />
        <h3>{this.state.msg}</h3>
      </div>
    );
  }

  changeMsg() {
    // 注意:這里的changeMsg()只是一個普通方法。因此,在觸發(fā)的時候,這里的 this 是 undefined
    console.log(this); // 打印結(jié)果:undefined
    this.setState({
      msg: "設(shè)置 msg 為新的值"
    });
  }
}


上面的代碼中,點(diǎn)擊按鈕,執(zhí)行 changeMsg() 方法,嘗試修改 this.state.msg 的值。但是,這個方法執(zhí)行的時候,是會報(bào)錯的:

Uncaught TypeError: Cannot read property 'setState' of null

而且,打印this的結(jié)果也是 undefined。這是為啥呢?因?yàn)檫@里的 this 并不是指向 MyComponent 組件本身。

那如何讓 changeMsg() 方法里面的 this,指向MyComponent 組件呢?辦法總是有的,比如說,將changeMsg() 修改為箭頭函數(shù):

  changeMsg = () => {
    console.log(this); // 打印結(jié)果:MyComponent 組件
    this.setState({
      msg: "設(shè)置 msg 為新的值"
    });
  };

那么,除了箭頭函數(shù)可以 綁定 this,還有沒有其他的方式呢?我們接下來講一講。

綁定 this 的方式一:bind()

代碼舉例:

import React from "react";

export default class MyComponent extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      msg: "這是 MyComponent 組件 默認(rèn)的msg"
    };
  }

  render() {
    return (
      <div>
        <h1>綁定This并傳參</h1>
        {/* bind 的作用:為前面的函數(shù),修改函數(shù)內(nèi)部的 this 指向。讓 函數(shù)內(nèi)部的this,指向 bind 參數(shù)列表中的 第一個參數(shù) */}
        <input
          type="button"
          value="綁定this并傳參"
          onClick={this.changeMsg1.bind(this)}
        />
        <h3>{this.state.msg}</h3>
      </div>
    );
  }

  changeMsg1() {
    this.setState({
      msg: "設(shè)置 msg 為新的值"
    });
  }
}

上方代碼中,我們?yōu)槭裁从?bind(),而不是用 call/apply 呢?因?yàn)?bind() 并不會立即調(diào)用,正是我們需要的。

注意:bind 中的第一個參數(shù),是用來修改 this 指向的。第一個參數(shù)后面的所有參數(shù),都將作為函數(shù)的參數(shù)傳遞進(jìn)去。

我們來看看通過 bind() 是怎么傳參的。

通過 bind() 綁定this,并給函數(shù)傳參

import React from "react";

export default class MyComponent extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      msg: "這是 MyComponent 組件 默認(rèn)的msg"
    };
  }

  render() {
    return (
      <div>
        <h1>綁定This并傳參</h1>
        {/* bind 的作用:為前面的函數(shù),修改函數(shù)內(nèi)部的 this 指向。讓 函數(shù)內(nèi)部的this,指向 bind 參數(shù)列表中的 第一個參數(shù) */}
        <input type="button" value="綁定this并傳參" onClick={this.changeMsg1.bind(this, "編程的一拳超人啊", "編程的一拳超人啊")} />
        <h3>{this.state.msg}</h3>
      </div>
    );
  }

  changeMsg1(arg1, arg2) {
    this.setState({
      msg: "設(shè)置 msg 為新的值" + arg1 + arg2
    });
  }
}

綁定 this 并給函數(shù)傳參 的方式二:構(gòu)造函數(shù)里設(shè)置 bind()

我們知道,構(gòu)造函數(shù)中的 this 本身就是指向組件的實(shí)例的,所以,我們可以在這里做一些事情。

代碼舉例:

import React from "react";

export default class MyComponent extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      msg: "這是 MyComponent 組件 默認(rèn)的msg"
    };

    // 綁定 this 并給函數(shù)傳參的方式2: 在構(gòu)造函數(shù)中綁定并傳參
    // 注意:當(dāng)一個函數(shù)調(diào)用 bind 改變了this指向后,bind 函數(shù)調(diào)用的結(jié)果,有一個【返回值】,這個值,就是被改變this指向后的函數(shù)的引用。
    // 也就是說: bind 不會修改 原函數(shù)的 this 指向,而是改變了 “函數(shù)拷貝”的this指向。
    this.changeMsg2 = this.changeMsg2.bind(this, "編程的一拳超人恩", "編程的一拳超人恩");
  }

  render() {
    return (
      <div>
        <h1>綁定This并傳參</h1>
        <input type="button" value="綁定this并傳參" onClick={this.changeMsg2} />
        <h3>{this.state.msg}</h3>
      </div>
    );
  }

  changeMsg2(arg1, arg2) {
    this.setState({
      msg: "設(shè)置 msg 為新的值" + arg1 + arg2
    });
  }
}


上方代碼中,需要注意的是:當(dāng)一個函數(shù)調(diào)用 bind 改變了this指向后,bind 函數(shù)調(diào)用的結(jié)果,有一個【返回值】,這個值,就是被改變this指向后的函數(shù)的引用。也就是說: bind 不會修改 原函數(shù)的 this 指向,而是改變了 “函數(shù)拷貝”的this指向。

綁定 this 并給函數(shù)傳參 的方式三:箭頭函數(shù)【薦】

第三種方式用得最多。

代碼舉例:

import React from "react";

export default class MyComponent extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      msg: "這是 MyComponent 組件 默認(rèn)的msg"
    };
  }

  render() {
    return (
      <div>
        <h1>綁定This并傳參</h1>
        <input
          type="button"
          value="綁定this并傳參"
          onClick={() => {
            this.changeMsg3("編程的一拳超人3", "編程的一拳超人3");
          }}
        />
        <h3>{this.state.msg}</h3>
      </div>
    );
  }

  changeMsg3 = (arg1, arg2) => {
    // console.log(this);
    // 注意:這里的方式,是一個普通方法,因此,在觸發(fā)的時候,這里的 this 是 undefined
    this.setState({
      msg: "綁定this并傳參的方式3:" + arg1 + arg2
    });
  };
}


到此這篇關(guān)于React中綁定this并給函數(shù)傳參的三種方式的文章就介紹到這了,更多相關(guān)React綁定this并傳參內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 通過實(shí)例學(xué)習(xí)React中事件節(jié)流防抖

    通過實(shí)例學(xué)習(xí)React中事件節(jié)流防抖

    這篇文章主要介紹了通過實(shí)例學(xué)習(xí)React中事件節(jié)流防抖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • React前端實(shí)現(xiàn)將Word(Doc/Docx)轉(zhuǎn)HTML

    React前端實(shí)現(xiàn)將Word(Doc/Docx)轉(zhuǎn)HTML

    隨著在線內(nèi)容生產(chǎn)需求的持續(xù)增長,轉(zhuǎn)換Word文檔到HTML格式已成為核心需求之一,本文將從環(huán)境配置、核心邏輯實(shí)現(xiàn)、導(dǎo)出參數(shù)定制三個維度詳細(xì)介紹React的實(shí)現(xiàn)方案,希望對大家有所幫助
    2025-11-11
  • React 條件判斷實(shí)例詳解

    React 條件判斷實(shí)例詳解

    在 React 中,可以通過 JavaScript 的條件語句來動態(tài)渲染組件或元素,下面給大家分享幾種常用的在 React 中處理?xiàng)l件渲染的方法,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • React類組件和函數(shù)組件對比-Hooks的簡介

    React類組件和函數(shù)組件對比-Hooks的簡介

    Hook?是?React?16.8?的新增特性,它可以讓我們在不編寫class的情況下,?使用state以及其他的React特性(比如生命周期,這篇文章主要介紹了React類組件和函數(shù)組件對比-Hooks的介紹及初體驗(yàn),需要的朋友可以參考下
    2022-11-11
  • React父組件數(shù)據(jù)實(shí)時更新了,子組件沒有更新的問題

    React父組件數(shù)據(jù)實(shí)時更新了,子組件沒有更新的問題

    這篇文章主要介紹了React父組件數(shù)據(jù)實(shí)時更新了,子組件沒有更新的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Electron+React應(yīng)用打包全流程

    Electron+React應(yīng)用打包全流程

    本文主要介紹了Electron+React應(yīng)用打包全流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 教你在react中創(chuàng)建自定義hooks

    教你在react中創(chuàng)建自定義hooks

    簡單來說就是使用自定義hook可以將某些組件邏輯提取到可重用的函數(shù)中。 自定義hook是一個從use開始的調(diào)用其他hook的Javascript函數(shù),下面看下react中創(chuàng)建自定義hooks的相關(guān)知識,感興趣的朋友一起看看吧
    2021-11-11
  • React+valtio響應(yīng)式狀態(tài)管理

    React+valtio響應(yīng)式狀態(tài)管理

    Valtio是一個很輕量級的響應(yīng)式狀態(tài)管理庫,使用外部狀態(tài)代理去驅(qū)動React視圖來更新,本文主要介紹了React+valtio響應(yīng)式狀態(tài)管理,感興趣的可以了解一下
    2023-12-12
  • create-react-app安裝出錯問題解決方法

    create-react-app安裝出錯問題解決方法

    這篇文章主要介紹了create-react-app安裝出錯問題解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • React組件三大屬性之state,props,refs

    React組件三大屬性之state,props,refs

    這篇文章主要介紹了React組件三大屬性之state,props,refs,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07

最新評論

大竹县| 寿光市| 防城港市| 平江县| 北安市| 睢宁县| 鄂托克前旗| 上杭县| 肇源县| 康平县| 二手房| 金沙县| 渑池县| 运城市| 嘉黎县| 高阳县| 六盘水市| 遵义市| 海盐县| 西和县| 黔西县| 南汇区| 临洮县| 浠水县| 长泰县| 瑞丽市| 腾冲县| 西林县| 河北省| 莱西市| 大关县| 家居| 峡江县| 布拖县| 嘉禾县| 庆城县| 美姑县| 和田县| 霍林郭勒市| 永靖县| 新竹市|