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

React受控組件與非受控組件實(shí)例分析講解

 更新時(shí)間:2023年01月18日 08:38:29   作者:上官孜然  
具體來(lái)說(shuō)這是一種react非受控組件,其狀態(tài)是在input的react內(nèi)部控制,不受調(diào)用者控制。可以使用受控組件來(lái)實(shí)現(xiàn)。下面就說(shuō)說(shuō)這個(gè)React中的受控組件與非受控組件的相關(guān)知識(shí),感興趣的朋友一起看看吧

一、受控組件

在HTML中,表單元素的標(biāo)簽、、等的值改變通常是根據(jù)用戶輸入進(jìn)行更新。

在React中,可變狀態(tài)通常保存在組件的狀態(tài)屬性中,并且只能使用 setState() 進(jìn)行更新,而呈現(xiàn)表單的React組件也控制著在后續(xù)用戶輸入時(shí)該表單中發(fā)生的情況,以這種由React控制的輸入表單元素而改變其值的方式,稱為受控組件。

比如,給表單元素input綁定一個(gè)onChange事件,當(dāng)input狀態(tài)發(fā)生變化時(shí)就會(huì)觸發(fā)onChange事件,從而更新組件的state。

import React, { Component } from 'react'
export default class MyInput extends Component{
  constructor(props) {
    super(props);
    this.state = {
      value: 0
    }
  }
  handleChange = (event)=>{
    this.setState({
        value: event.target.value
    })
  }
  render(){
    return(
      <div>
          <input
              type="text"
              value={this.state.value}
              onChange={this.handleChange}
           />
      </div>
    )
  }
}

受控組件更新state的流程

  • 可以通過(guò)初始state中設(shè)置表單的默認(rèn)值
  • 每當(dāng)表單的值發(fā)生變化時(shí),調(diào)用onChange事件處理器
  • 事件處理器通過(guò)事件對(duì)象event拿到改變后的狀態(tài),并更新組件的state
  • 一旦通過(guò)setState方法更新state,就會(huì)觸發(fā)視圖的重新渲染,完成表單組件的更新

React中數(shù)據(jù)是單項(xiàng)流動(dòng)的,從示例中,可以看出表單的數(shù)據(jù)來(lái)源于組件的state,并通過(guò)props傳入,這也稱為單向數(shù)據(jù)綁定。然后又通過(guò)onChange事件處理器將新的數(shù)據(jù)寫回到state,完成了雙向數(shù)據(jù)綁定。

二、非受控組件

非受控組件指的是,表單數(shù)據(jù)由DOM本身處理。即不受setState()的控制,與傳統(tǒng)的HTML表單輸入相似,input輸入值即顯示最新值。

在非受控組件中,可以使用一個(gè)ref來(lái)從DOM獲得表單值。

class NameForm extends React.Component {
  constructor(props) {
    super(props);
    this.handleSubmit = this.handleSubmit.bind(this);
  }
  handleSubmit(event) {
    console.log('A name was submitted: ' + this.input.value);
    event.preventDefault();
  }
  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <input type="text" ref={(input) => this.input = input} />
        </label>
        <input type="submit" value="Submit" />
      </form>
    );
  }
}

非受控組件在底層實(shí)現(xiàn)時(shí)是在其內(nèi)部維護(hù)了自己的狀態(tài)state,這樣表現(xiàn)出用戶輸入任何值都能反應(yīng)到元素上。

三、總結(jié)

兩者區(qū)別

1.受控組件

受控組件依賴于狀態(tài)

受控組件的修改會(huì)實(shí)時(shí)映射到狀態(tài)值上,此時(shí)可以對(duì)輸入的內(nèi)容進(jìn)行校驗(yàn)

受控組件只有繼承React.Component才會(huì)有狀態(tài)

受控組件必須要在表單上使用onChange事件來(lái)綁定對(duì)應(yīng)的事件

2.非受控組件

非受控組件不受狀態(tài)的控制

非受控組件獲取數(shù)據(jù)就是相當(dāng)于操作DOM

非受控組件可以很容易和第三方組件結(jié)合,更容易同時(shí)集成 React 和非 React 代碼

選擇受控組件還是非受控組件

3.受控組件使用場(chǎng)景:一般用在需要?jiǎng)討B(tài)設(shè)置其初始值的情況。例如:某些form表單信息編輯時(shí),input表單元素需要初始顯示服務(wù)器返回的某個(gè)值然后進(jìn)行編輯。

4.非受控組件使用場(chǎng)景:一般用于無(wú)任何動(dòng)態(tài)初始值信息的情況。例如:form表單創(chuàng)建信息時(shí),input表單元素都沒(méi)有初始值,需要用戶輸入的情況。

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

相關(guān)文章

  • 在create-react-app中使用css modules的示例代碼

    在create-react-app中使用css modules的示例代碼

    這篇文章主要介紹了在create-react-app中使用css modules的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • react中fetch之cors跨域請(qǐng)求的實(shí)現(xiàn)方法

    react中fetch之cors跨域請(qǐng)求的實(shí)現(xiàn)方法

    本篇文章主要介紹了react中fetch之cors跨域請(qǐng)求的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • React實(shí)現(xiàn)路由返回?cái)r截的三種方式

    React實(shí)現(xiàn)路由返回?cái)r截的三種方式

    最近項(xiàng)目為了避免用戶誤操作導(dǎo)致數(shù)據(jù)丟失,增加返回?cái)r截功能,但是之前由于qiankun的報(bào)錯(cuò)導(dǎo)致這個(gè)功能一直有一些問(wèn)題,所以專門獨(dú)立搞了一個(gè)專題研究在react中各種方式實(shí)現(xiàn)這個(gè)功能,需要的朋友可以參考下
    2024-05-05
  • 詳解React中的組件通信問(wèn)題

    詳解React中的組件通信問(wèn)題

    本篇文章中主要介紹了詳解React中的組件通信問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • React工作流程及Error Boundaries實(shí)現(xiàn)過(guò)程講解

    React工作流程及Error Boundaries實(shí)現(xiàn)過(guò)程講解

    這篇文章主要介紹了React工作流程及Error Boundaries實(shí)現(xiàn)過(guò)程講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • React中的Refs屬性你來(lái)了解嗎

    React中的Refs屬性你來(lái)了解嗎

    這篇文章主要為大家詳細(xì)介紹了的React?Refs屬性,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • React 組件中的state和setState()你知道多少

    React 組件中的state和setState()你知道多少

    這篇文章主要為大家詳細(xì)介紹了React組件中的state和setState(),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • react如何使用mobx6動(dòng)態(tài)加載數(shù)據(jù)

    react如何使用mobx6動(dòng)態(tài)加載數(shù)據(jù)

    MobX是一個(gè)強(qiáng)大而簡(jiǎn)單的狀態(tài)管理工具,它可以幫助我們更好地組織和管理React應(yīng)用程序中的數(shù)據(jù)流,本文給大家介紹react如何使用mobx6動(dòng)態(tài)加載數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • React?JSX深入淺出理解

    React?JSX深入淺出理解

    React使用JSX來(lái)替代常規(guī)的JavaScript。JSX是一個(gè)看起來(lái)很像 XML的JavaScript語(yǔ)法擴(kuò)展。我們不需要一定使用 JSX,但它有以下優(yōu)點(diǎn):JSX執(zhí)行更快,因?yàn)樗诰幾g為JavaScript代碼后進(jìn)行了優(yōu)化。它是類型安全的,在編譯過(guò)程中就能發(fā)現(xiàn)錯(cuò)誤。使用JSX編寫模板更加簡(jiǎn)單快速
    2022-12-12
  • React手寫tab切換問(wèn)題

    React手寫tab切換問(wèn)題

    今天介紹下React手寫tab切換問(wèn)題,代碼部分包括父文件,子文件及子文件tab樣式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2021-11-11

最新評(píng)論

昌乐县| 英德市| 青神县| 新竹市| 林芝县| 莱州市| 兴文县| 定兴县| 齐河县| 清徐县| 建德市| 龙海市| 柳林县| 磴口县| 普格县| 南昌县| 铜山县| 邵武市| 宿州市| 景洪市| 广安市| 安龙县| 炎陵县| 金塔县| 迁安市| 阿拉尔市| 德保县| 延庆县| 庆阳市| 南皮县| 河东区| 霍城县| 广平县| 泾阳县| 柘城县| 开平市| 惠州市| 准格尔旗| 三原县| 平和县| 恩平市|