日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
說說對React中受控組件和非受控組件的理解?應(yīng)用場景?

本文轉(zhuǎn)載自微信公眾號(hào)「JS每日一題」,作者灰灰。轉(zhuǎn)載本文請聯(lián)系JS每日一題公眾號(hào)。

成都創(chuàng)新互聯(lián)專注于包河企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城開發(fā)。包河網(wǎng)站建設(shè)公司,為包河等地區(qū)提供建站服務(wù)。全流程專業(yè)公司,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

一、受控組件

受控組件,簡單來講,就是受我們控制的組件,組件的狀態(tài)全程響應(yīng)外部數(shù)據(jù)

舉個(gè)簡單的例子:

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

這時(shí)候當(dāng)我們在輸入框輸入內(nèi)容的時(shí)候,會(huì)發(fā)現(xiàn)輸入的內(nèi)容并無法顯示出來,也就是input標(biāo)簽是一個(gè)可讀的狀態(tài)

這是因?yàn)関alue被this.state.username所控制住。當(dāng)用戶輸入新的內(nèi)容時(shí),this.state.username并不會(huì)自動(dòng)更新,這樣的話input內(nèi)的內(nèi)容也就不會(huì)變了

如果想要解除被控制,可以為input標(biāo)簽設(shè)置onChange事件,輸入的時(shí)候觸發(fā)事件函數(shù),在函數(shù)內(nèi)部實(shí)現(xiàn)state的更新,從而導(dǎo)致input框的內(nèi)容頁發(fā)現(xiàn)改變

因此,受控組件我們一般需要初始狀態(tài)和一個(gè)狀態(tài)更新事件函數(shù)

二、非受控組件

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

一般情況是在初始化的時(shí)候接受外部數(shù)據(jù),然后自己在內(nèi)部存儲(chǔ)其自身狀態(tài)

當(dāng)需要時(shí),可以使用ref 查詢 DOM并查找其當(dāng)前值,如下:

 
 
 
 
  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內(nèi)的值為', this.inputRef.current.value); 
  10.     e.preventDefault(); 
  11.   } 
  12.   render () { 
  13.     return ( 
  14.        this.handleSubmit(e)}> 
  15.          
  16.          
  17.        
  18.     ) 
  19.   } 

關(guān)于refs的詳情使用可以參考之前文章

三、應(yīng)用場景

大部分時(shí)候推薦使用受控組件來實(shí)現(xiàn)表單,因?yàn)樵谑芸亟M件中,表單數(shù)據(jù)由React組件負(fù)責(zé)處理

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

針對兩者的區(qū)別,其應(yīng)用場景如下圖所示:

參考文獻(xiàn)

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

名稱欄目:說說對React中受控組件和非受控組件的理解?應(yīng)用場景?
當(dāng)前網(wǎng)址:http://m.5511xx.com/article/cdjpsdj.html