成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

說說對React中受控組件和非受控組件的理解?應用場景?

開發 前端
如果想要解除被控制,可以為input標簽設置onChange事件,輸入的時候觸發事件函數,在函數內部實現state的更新,從而導致input框的內容頁發現改變。

[[410315]]

本文轉載自微信公眾號「JS每日一題」,作者灰灰。轉載本文請聯系JS每日一題公眾號。

一、受控組件

受控組件,簡單來講,就是受我們控制的組件,組件的狀態全程響應外部數據

舉個簡單的例子:

  1. class TestComponent extends React.Component { 
  2.   constructor (props) { 
  3.     super(props); 
  4.     this.state = { username: 'lindaidai' }; 
  5.   } 
  6.   render () { 
  7.     return <input name="username" value={this.state.username} /> 
  8.   } 

這時候當我們在輸入框輸入內容的時候,會發現輸入的內容并無法顯示出來,也就是input標簽是一個可讀的狀態

這是因為value被this.state.username所控制住。當用戶輸入新的內容時,this.state.username并不會自動更新,這樣的話input內的內容也就不會變了

如果想要解除被控制,可以為input標簽設置onChange事件,輸入的時候觸發事件函數,在函數內部實現state的更新,從而導致input框的內容頁發現改變

因此,受控組件我們一般需要初始狀態和一個狀態更新事件函數

二、非受控組件

非受控組件,簡單來講,就是不受我們控制的組件

一般情況是在初始化的時候接受外部數據,然后自己在內部存儲其自身狀態

當需要時,可以使用ref 查詢 DOM并查找其當前值,如下:

  1. import React, { Component } from 'react'
  2.  
  3. export class UnControll extends Component { 
  4.   constructor (props) { 
  5.     super(props); 
  6.     this.inputRef = React.createRef(); 
  7.   } 
  8.   handleSubmit = (e) => { 
  9.     console.log('我們可以獲得input內的值為', this.inputRef.current.value); 
  10.     e.preventDefault(); 
  11.   } 
  12.   render () { 
  13.     return ( 
  14.       <form onSubmit={e => this.handleSubmit(e)}> 
  15.         <input defaultValue="lindaidai" ref={this.inputRef} /> 
  16.         <input type="submit" value="提交" /> 
  17.       </form> 
  18.     ) 
  19.   } 

關于refs的詳情使用可以參考之前文章

三、應用場景

大部分時候推薦使用受控組件來實現表單,因為在受控組件中,表單數據由React組件負責處理

如果選擇非受控組件的話,控制能力較弱,表單數據就由DOM本身處理,但更加方便快捷,代碼量少

針對兩者的區別,其應用場景如下圖所示:

參考文獻

 

  • http://meloguo.com/2018/10/08/受控與非受控組件/
  • https://zhuanlan.zhihu.com/p/37579677

 

責任編輯:武曉燕 來源: JS每日一題
相關推薦

2022-07-06 08:29:12

antdInput 組件

2021-07-12 08:35:24

組件應用場景

2021-03-18 08:00:55

組件Hooks React

2020-10-21 08:38:47

React源碼

2021-07-07 08:36:45

React應用場景

2021-05-31 10:35:34

TCPWebSocket協議

2021-09-26 18:43:48

表單受控React

2021-06-07 09:41:48

NodeBuffer 網絡協議

2021-06-08 08:33:23

NodeStream數據

2021-07-08 06:51:29

React函數組件

2021-06-30 07:19:36

React事件機制

2021-12-13 14:37:37

React組件前端

2021-09-06 10:51:27

TypeScriptJavaScript

2021-09-16 07:52:18

算法應用場景

2021-09-08 07:49:34

TypeScript 泛型場景

2021-11-05 07:47:56

代理模式對象

2021-11-09 08:51:13

模式命令面試

2021-07-13 07:52:03

ReactHooks組件

2021-11-10 07:47:49

組合模式場景

2021-11-03 14:10:28

工廠模式場景
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品日韩在线观看一区二区 | 婷婷精品 | 欧美一区视频 | 性生生活大片免费看视频 | 精品一二区 | 草草草网站 | 国产精品免费观看 | 男女羞羞视频在线观看 | 久久一级免费视频 | 中文字幕日韩专区 | 国产免费人成xvideos视频 | 亚洲一区精品视频 | 一区二区三区免费看 | 国产精品视频免费观看 | 91免费看片神器 | av在线免费播放 | 亚洲天堂999 | 成人性生交大片免费看中文带字幕 | 黄视频免费| 一级片视频免费 | 亚洲黄色av | 黄色免费网址大全 | 精品视频一区二区三区在线观看 | 中文字幕视频在线观看 | 国产精品视频网站 | 国产二区精品视频 | 一区在线免费视频 | 中文字幕免费在线 | 在线一区二区三区 | 男人天堂久久 | 免费视频一区二区 | 宅男噜噜噜66一区二区 | 日韩一二三区 | 精品少妇v888av| 91久久久久久久久久久 | 激情av网站 | 观看av| 日本成人综合 | 日本成人三级电影 | 久久网一区二区 | 天天干b |