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

React事件處理和表單的綁定詳解

 更新時間:2022年08月31日 15:30:35   作者:小綿楊Yancy  
這篇文章主要介紹了React事件處理和表單的綁定,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、事件處理

1.1 React事件

React 元素的事件處理和 DOM 元素類似。但是有一點語法上的不同:

  • React 事件綁定屬性的命名采用駝峰式寫法,而不是小寫。 例如onclick屬性應該寫成onClick
  • 如果采用 JSX的語法你需要傳入一個函數(shù)作為事件處理函數(shù),而不是一個字符串(DOM 元素的寫法)。例如已經(jīng)定義了一個名為handleClick的函數(shù),應該這樣調(diào)用:
<button onClick={<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->handleClick}>Button</button>

而不是:

<button onClick="handleClick()">Button</button>

1.2 事件對象

在事件發(fā)生時調(diào)用的函數(shù),默認是自帶一個參數(shù)的,這個參數(shù)通常被命名為event,就是事件對象。

例如,我們?yōu)橐粋€input輸入框的onchange事件設置一個函數(shù),獲取事件對象。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>EventObject</title>
    <script src="https://cdn.staticfile.org/react/16.8.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.8.0/umd/react-dom.development.js"></script>
    <!-- 生產(chǎn)環(huán)境中不建議使用 -->
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
  </head>
  <body>
    <div id="app"></div>
    <script type="text/babel">
      class MyInput extends React.Component {
        constructor(props) {
          super(props);
          this.handleChange = this.handleChange.bind(this);
        }
        handleChange(event) {
          console.log(event);
          console.log(event.target);
        }
        render() {
          return (
            <div>
              <span>Input:</span>
              <input type="text" onChange={this.handleChange} />
            </div>
          );
        }
      }
      ReactDOM.render(<MyInput />, document.getElementById("app"));
    </script>
  </body>
</html>

可以看到,event.target就是觸發(fā)事件的dom元素。

1.3 事件傳參

除了自帶的默認參數(shù)(事件對象)外,有時候我們需要額外傳遞傳輸給事件處理的函數(shù),這個時候不能直接調(diào)用函數(shù)并傳參,例如下面的用法是錯誤的:

<input type="text" onChange={<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->this.handleChange(1)} />

正確的用法應該是使用匿名函數(shù)來實現(xiàn)傳參:

<input type="text" onChange={() => this.handleChange(event, "id")}/>

此時處理函數(shù)handleChange:

handleChange(event, id) {
      console.log(event.target.value);
      console.log(id);
}

第一個參數(shù)一定是事件對象,后面的參數(shù)名稱隨意,但是順序必須一一對應。

1.4 函數(shù)組件事件處理

通過上面的例子不難看出,class組件有一個非常麻煩的點在于必須在構造函數(shù)中聲明并綁定方法的this:

右邊中的this:這個this是在構造器方法中的,所以它的指向是組件的實例對象;

右邊handleChange方法:這個方法是在類的原型對象上的;而使用bind的函數(shù)把這個原型對象方法上的this修改成類實例對象上的this,右邊的代碼執(zhí)行完成之后生成一個新的函數(shù),然后把這個新函數(shù)放到實例的自身上也就是等式的左邊,且給這個函數(shù)起了一個名字(左邊方法名),這樣就能解決原型方法上其他方法調(diào)用該方法this指向是undefined的問題了。此時其他方法調(diào)用該函數(shù)時this就指向的是實例對象了

而函數(shù)式組件中,就簡單了許多:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>EventObject</title>
    <script src="https://cdn.staticfile.org/react/16.8.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.8.0/umd/react-dom.development.js"></script>
    <!-- 生產(chǎn)環(huán)境中不建議使用 -->
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
  </head>
  <body>
    <div id="app"></div>
    <script type="text/babel">
      function MyInput() {
        function handleChange(event, id) {
          console.log(event.target.value);
          console.log(id);
        }
        return (
          <div>
            <span>Input:</span>
            <input type="text" onChange={() => handleChange(event, "id")} />
          </div>
        );
      }
      ReactDOM.render(<MyInput />, document.getElementById("app"));
    </script>
  </body>
</html>

二、表單

雙向綁定

在vue中,可以使用v-model指令實現(xiàn)表單的雙向綁定,但是實際上,v-model只是v-bind和v-on的語法糖,在react中,我們可以直接利用屬性和屬性改變的處理事件實現(xiàn)雙向綁定的功能。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Form</title>
    <script src="https://cdn.staticfile.org/react/16.8.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.8.0/umd/react-dom.development.js"></script>
    <!-- 生產(chǎn)環(huán)境中不建議使用 -->
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
  </head>
  <body>
    <div id="app"></div>
    <script type="text/babel">
      class HelloMessage extends React.Component {
        constructor(props) {
          super(props);
          this.state = { value: "Hello React!" };
          this.handleChange = this.handleChange.bind(this);
        }
        handleChange(event) {
          this.setState({ value: event.target.value });
        }
        render() {
          let value = this.state.value;
          return (
            <div>
              <input type="text" value={value} onChange={this.handleChange} />
              <h4>{value}</h4>
            </div>
          );
        }
      }
      ReactDOM.render(<HelloMessage />, document.getElementById("app"));
    </script>
  </body>
</html>

到此這篇關于React事件處理和表單的綁定詳解的文章就介紹到這了,更多相關React事件處理 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • ReactJs設置css樣式的方法

    ReactJs設置css樣式的方法

    本篇文章主要介紹了ReactJs設置css樣式的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • React18?中的?Suspense?API使用實例詳解

    React18?中的?Suspense?API使用實例詳解

    這篇文章主要為大家介紹了React18?中的?Suspense?API使用實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • React項目中報錯:Parsing error: The keyword 'import' is reservedeslint的問題及解決方法

    React項目中報錯:Parsing error: The keyword &a

    ESLint 默認使用的是 ES5 語法,如果你想使用 ES6 或者更新的語法,你需要在 ESLint 的配置文件如:.eslintrc.js等中設置 parserOptions,這篇文章主要介紹了React項目中報錯:Parsing error: The keyword 'import' is reservedeslint的問題及解決方法,需要的朋友可以參考下
    2023-12-12
  • react組件的創(chuàng)建與更新實現(xiàn)流程詳解

    react組件的創(chuàng)建與更新實現(xiàn)流程詳解

    React組件分為函數(shù)組件與class組件;函數(shù)組件是無狀態(tài)組件,class稱為類組件;函數(shù)組件只有props,沒有自己的私有數(shù)據(jù)和生命周期函數(shù);class組件有自己私有數(shù)據(jù)(this.state)和生命周期函數(shù)
    2022-10-10
  • 編寫簡潔React組件的小技巧

    編寫簡潔React組件的小技巧

    這篇文章主要介紹了編寫簡潔React組件的小技巧,幫助大家更好的理解和學習使用React,感興趣的朋友可以了解下
    2021-04-04
  • React-intl 實現(xiàn)多語言的示例代碼

    React-intl 實現(xiàn)多語言的示例代碼

    本篇文章主要介紹了React-intl 實現(xiàn)多語言的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • react封裝全局彈框的方法

    react封裝全局彈框的方法

    這篇文章主要為大家詳細介紹了react封裝全局彈框的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • React+umi+typeScript創(chuàng)建項目的過程

    React+umi+typeScript創(chuàng)建項目的過程

    這篇文章主要介紹了React+umi+typeScript創(chuàng)建項目的過程,結合代碼介紹了項目框架搭建的方式,本文給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • 詳解react中的state的簡寫方式

    詳解react中的state的簡寫方式

    React是一個狀態(tài)機主要體現(xiàn)在state上,通過與用戶交易實現(xiàn)不同的狀態(tài),state是組件的私有屬性,是用來初始化的,本文重點給大家介紹react中的state的簡寫方式,感興趣的朋友一起看看吧
    2021-08-08
  • React中state屬性案例詳解

    React中state屬性案例詳解

    在React中,state 是一個用于存儲組件內(nèi)部數(shù)據(jù)的特殊對象,每個React組件都可以包含自己的state,我們往往是通過修改state的值來驅(qū)動React重新渲染組件,這篇文章主要介紹了React中state屬性,需要的朋友可以參考下
    2023-11-11

最新評論

鹤岗市| 比如县| 荥经县| 新泰市| 文化| 平顶山市| 屯留县| 高邮市| 饶平县| 定兴县| 慈利县| 靖西县| 剑阁县| 肥城市| 东丽区| 甘德县| 江达县| 揭西县| 溆浦县| 贡山| 科尔| 航空| 葵青区| 江孜县| 祥云县| 化州市| 屏山县| 平度市| 洛浦县| 济宁市| 科技| 泰来县| 眉山市| 济宁市| 鹤庆县| 共和县| 西峡县| 奎屯市| 罗山县| 焦作市| 容城县|