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

React中的受控組件與非受控組件詳解

 更新時(shí)間:2023年08月28日 10:20:57   作者:石小石Orz  
在React中,受控組件指的是表單元素的value值受React組件的state或props控制的組件,而非受控組件則是表單元素的value值由DOM自身負(fù)責(zé)管理的組件,本文將給大家詳細(xì)介紹React受控組件與非受控組件,需要的朋友可以參考下

非受控組件

我們看一個(gè)簡單的demo

<script type="text/babel">
  // 1、創(chuàng)建組件
  class UncontrolledComponent extends React.Component {
    handleSubmit = (event) => {
      event.preventDefault();
      alert(this.input.value);
    };
    render() {
      return (
        <form onSubmit={this.handleSubmit}>
          <label>
            <input type="text" ref={(input) => (this.input = input)} />
          </label>
          <button type="submit">提交</button>
        </form>
      );
    }
  }
  // 2、渲染組件
  ReactDOM.render(<UncontrolledComponent />, document.getElementById("test"));
</script>

頁面效果

上面的代碼中,UncontrolledComponent是一個(gè)非受控組件,它的輸入值是由頁面DOM控制的。輸入框的值被存儲(chǔ)在input元素的dom節(jié)點(diǎn)上。當(dāng)表單提交時(shí),handleSubmit方法使用alert方法輸出該輸入元素的值。

這里使用了ref屬性來獲取input元素的dom節(jié)點(diǎn)

event.preventDefault阻止form表單的默認(rèn)提交事件

受控組件

<script type="text/babel">
  // 1、創(chuàng)建組件
  class ControlledComponent extends React.Component {
    // 初始化state狀態(tài)值
    state = {
      inputValue: "",
    };
    handleChange = (event) => {
      this.setState({ inputValue: event.target.value });
    };
    handleSubmit = (event) => {
      event.preventDefault();
      console.log(this.state.inputValue);
    };
    render() {
      return (
        <form onSubmit={this.handleSubmit}>
          <label>
            Input:
            <input type="text" value={this.state.inputValue} onChange={this.handleChange} />
          </label>
          <button type="submit">Submit</button>
        </form>
      );
    }
  }
  // 2、渲染組件
  ReactDOM.render(<ControlledComponent />, document.getElementById("test"));
</script>

頁面效果

上面的代碼中,ControlledComponent是一個(gè)受控組件,它的輸入值是由React控制的。輸入框的值被存儲(chǔ)在組件的狀態(tài)中。當(dāng)用戶輸入時(shí),handleChange方法將更新輸入值的狀態(tài)。當(dāng)表單提交時(shí),handleSubmit方法將使用console.log輸出輸入值。

如果我們熟悉vue,會(huì)發(fā)現(xiàn)這里的state非常像vue中的雙向數(shù)據(jù)綁定data,我們通過onChange事件實(shí)時(shí)的更新狀態(tài)中的inputValue值,然后通過handleSubmit函數(shù)展示最新數(shù)據(jù)。

雙向數(shù)據(jù)綁定

借助受控組件的特性,我們完全在類組件中可以實(shí)現(xiàn)一個(gè)雙向數(shù)據(jù)綁定的實(shí)例。

<script type="text/babel">
  // 1、創(chuàng)建組件
  class ControlledComponent extends React.Component {
    state = {
      inputValue: "",
    };
    handleChange = (event) => {
      this.setState({ inputValue: event.target.value });
    };
    handleSubmit = (event) => {
      event.preventDefault();
      console.log(this.state.inputValue);
    };
    render() {
      return (
        <form onSubmit={this.handleSubmit}>
          <label>
            <input type="text" value={this.state.inputValue} onChange={this.handleChange} />
          </label>
          <span>{this.state.inputValue}</span>
        </form>
      );
    }
  }
  // 2、渲染組件
  ReactDOM.render(<ControlledComponent />, document.getElementById("test"));
</script>

優(yōu)缺點(diǎn)

通常來說,在復(fù)雜表單場景下,使用受控組件能夠更好地控制表單元素的值,可以進(jìn)行更加靈活的數(shù)據(jù)驗(yàn)證和過濾等操作;

而在簡單表單場景下,使用非受控組件更加便捷簡單,但是由于表單元素的值是由DOM自身管理的,所以在處理表單元素時(shí)具有一定的局限性。

到此這篇關(guān)于React中的受控組件與非受控組件詳解的文章就介紹到這了,更多相關(guān)React受控組件與非受控組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React中的setState使用細(xì)節(jié)和原理解析(最新推薦)

    React中的setState使用細(xì)節(jié)和原理解析(最新推薦)

    這篇文章主要介紹了React中的setState使用細(xì)節(jié)和原理解析(最新推薦),前面我們有使用過setState的基本使用, 接下來我們對(duì)setState使用進(jìn)行詳細(xì)的介紹,需要的朋友可以參考下
    2022-12-12
  • React組件化條件渲染的實(shí)現(xiàn)

    React組件化條件渲染的實(shí)現(xiàn)

    本文主要介紹了React組件化條件渲染的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • React+valtio響應(yīng)式狀態(tài)管理

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

    Valtio是一個(gè)很輕量級(jí)的響應(yīng)式狀態(tài)管理庫,使用外部狀態(tài)代理去驅(qū)動(dòng)React視圖來更新,本文主要介紹了React+valtio響應(yīng)式狀態(tài)管理,感興趣的可以了解一下
    2023-12-12
  • React?SSR架構(gòu)Streaming?Render與Selective?Hydration解析

    React?SSR架構(gòu)Streaming?Render與Selective?Hydration解析

    這篇文章主要為大家介紹了React?SSR架構(gòu)Streaming?Render與Selective?Hydration解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • React通過ref獲取子組件的數(shù)據(jù)和方法

    React通過ref獲取子組件的數(shù)據(jù)和方法

    這篇文章主要介紹了React如何通過ref獲取子組件的數(shù)據(jù)和方法,文中有詳細(xì)的總結(jié)內(nèi)容和代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-10-10
  • React Hook之使用Effect Hook的方法

    React Hook之使用Effect Hook的方法

    這篇文章主要為大家詳細(xì)介紹了React 使用Effect Hook的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • React+Vite中利用Fetch將CSV數(shù)據(jù)轉(zhuǎn)成JSON字符串

    React+Vite中利用Fetch將CSV數(shù)據(jù)轉(zhuǎn)成JSON字符串

    在一些小型項(xiàng)目中,前端可能需要直接處理 CSV 文件數(shù)據(jù),將其轉(zhuǎn)換為 JSON 字符串后再進(jìn)行邏輯操作和展示,本文將會(huì)介紹兩種方法,需要的朋友可以參考下
    2025-12-12
  • 淺析React 對(duì)state的理解

    淺析React 對(duì)state的理解

    state狀態(tài)是組件實(shí)例對(duì)象身上的狀態(tài),不是組件類本身身上的,是由這個(gè)類締造的實(shí)例身上的。這篇文章主要介紹了React 對(duì)state的理解,需要的朋友可以參考下
    2021-09-09
  • react-native中路由頁面的跳轉(zhuǎn)與傳參的實(shí)例詳解

    react-native中路由頁面的跳轉(zhuǎn)與傳參的實(shí)例詳解

    這篇文章主要介紹了react-native中路由頁面的跳轉(zhuǎn)與傳參,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • React useEffect的理解與使用

    React useEffect的理解與使用

    這篇文章主要介紹了React useEffect的理解與使用,幫助大家更好的理解和學(xué)習(xí)使用React,感興趣的朋友可以了解下
    2021-04-04

最新評(píng)論

电白县| 清原| 那坡县| 城固县| 吴旗县| 万年县| 尼勒克县| 凤台县| 红安县| 启东市| 息烽县| 呼伦贝尔市| 潮安县| 永新县| 桃源县| 富源县| 凤冈县| 汪清县| 常州市| 渝中区| 海宁市| 扎囊县| 绥棱县| 漾濞| 白朗县| 武清区| 静乐县| 富源县| 仙游县| 鹿邑县| 栾城县| 万山特区| 苍溪县| 增城市| 长乐市| 富川| 全州县| 于都县| 辽源市| 玉环县| 宣威市|