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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
受控和非受控表單|不受控制的東西,你非要往家領(lǐng)?

本文轉(zhuǎn)載自微信公眾號(hào)「勾勾的前端世界」,作者西嶺。轉(zhuǎn)載本文請(qǐng)聯(lián)系勾勾的前端世界公眾號(hào)。

創(chuàng)新互聯(lián)專(zhuān)注于企業(yè)全網(wǎng)整合營(yíng)銷(xiāo)推廣、網(wǎng)站重做改版、容縣網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁(yè)面制作、購(gòu)物商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為容縣等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

常用的受控表單示例

受控的下拉列表

  
 
 
  1. import React, { Component } from 'react' 
  2.  
  3. export class Tables extends Component { 
  4.  
  5.   state = { 
  6.     subject: "HTML" 
  7.   } 
  8.  
  9.   render() { 
  10.     return ( 
  11.       
     
  12.         

    {this.state.subject}

     
  13.         
  14.           onChange={ 
  15.             (ev) => this.setState( 
  16.               { subject: ev.target.value } 
  17.             ) 
  18.           }> 
  19.           JS 
  20.           HTML 
  21.           CSS 
  22.          
  23.  
  24.       
 
  •     ) 
  •   } 
  •  
  • export default Tables 
  • 受控單選框

      
     
     
    1. import React, { Component } from 'react' 
    2.  
    3. export class Tables extends Component { 
    4.  
    5.   state = { 
    6.     sex: "男" 
    7.   } 
    8.  
    9.   render() { 
    10.     return ( 
    11.       
       
    12.         

      {this.state.sex}

       
    13.         
    14.           onChange={ 
    15.             (ev) => this.setState({ sex: ev.target.value }) 
    16.           } /> 男 
    17.         
    18.           onChange={ 
    19.             (ev) => this.setState({ sex: ev.target.value }) 
    20.           } /> 女 
    21.         
    22.           onChange={ 
    23.             (ev) => this.setState({ sex: ev.target.value }) 
    24.           } /> 妖 
    25.       
     
  •     ) 
  •   } 
  •  
  • export default Tables 
  • 受控復(fù)選框

      
     
     
    1. import React, { Component } from 'react' 
    2.  
    3. export class Tables extends Component { 
    4.  
    5.   // 模擬數(shù)據(jù)源 
    6.   Datas = [ 
    7.     {id:1,title:'HTML',isChecked:false}, 
    8.     {id:2,title:'JS',isChecked:true}, 
    9.     {id:3,title:'CSS',isChecked:false}, 
    10.   ] 
    11.  
    12.   checks = (index,ev)=>{ 
    13.     // console.log(ev.target.checked) 
    14.     // console.log(index) 
    15.  
    16.     this.Datas[index].isChecked = ev.target.checked 
    17.   } 
    18.  
    19.   render() { 
    20.     return ( 
    21.       
       
    22.         

      復(fù)選框

       
    23.         { 
    24.           this.Datas.map((data,index)=>{ 
    25.             return ( 
    26.                
    27.                 {/* 使用 onChange 事件綁定,傳遞下標(biāo)及事件對(duì)象,在處理函數(shù)中進(jìn)行狀態(tài)修改 */} 
    28.                 {this.checks(index,ev)}} /> {data.title}  
    29.                
    30.             ) 
    31.           }) 
    32.         } 
    33.  
    34.         console.log(this.Datas)} >展示多選框內(nèi)容數(shù)據(jù) 
    35.       
     
  •     ) 
  •   } 
  •  
  • export default Tables 
  • 非受控表單

    在大多數(shù)情況下,我們推薦使用 受控表單 來(lái)處理表單數(shù)據(jù)。

    在一個(gè)受控組件中,表單數(shù)據(jù)是由 React 組件來(lái)管理的。另一種替代方案是使用非受控表單,這時(shí)表單數(shù)據(jù)將交由 DOM 節(jié)點(diǎn)來(lái)處理。

    受控表單需要為每個(gè)狀態(tài)更新都編寫(xiě)數(shù)據(jù)處理函數(shù),而使用非受控表單,你可以使用 ref 來(lái)從 DOM 節(jié)點(diǎn)中獲取表單數(shù)據(jù)。

      
     
     
    1. import React, { Component } from 'react' 
    2.  
    3. export class Tables extends Component { 
    4.  
    5.  
    6.   gets = ()=>{ 
    7.     console.log(this.refs.users.value) 
    8.   } 
    9.  
    10.   render() { 
    11.     return ( 
    12.       
       
    13.          
    14.         this.gets()}>獲取 
    15.       
     
  •     ) 
  •   } 
  •  
  • export default Tables 
  • 但是,這樣的用法會(huì)在瀏覽器中看到一個(gè)警告型的報(bào)錯(cuò)信息,原因也很簡(jiǎn)單,在新版的 React 中,默認(rèn)啟用了嚴(yán)格模式。

    Warning: A string ref, "users", has been found within a strict mode tree.

    我們需要在入口的 index.js 中,將嚴(yán)格模式的代碼刪除,如下:

      
     
     
    1. ReactDOM.render( 
    2.   
    3.     
    4.  , 
    5.  document.getElementById('root') 
    6. ); 

    改完之后就是這個(gè)鬼樣子了,錯(cuò)誤提示就消失了:

      
     
     
    1. ReactDOM.render( 
    2.     
    3.   document.getElementById('root') 
    4. ); 

    規(guī)范化寫(xiě)法

    但是,這樣的方式并不好,別問(wèn)為什么,就是不好,我們建議使用下面的方式:

      
     
     
    1. import React, { Component } from 'react' 
    2.  
    3. export class Tables extends Component { 
    4.   constructor (){ 
    5.     super() 
    6.     this.myref = React.createRef() 
    7.   } 
    8.  
    9.   gets = ()=>{ 
    10.     console.log(this.myref.current.value) 
    11.   } 
    12.  
    13.   render() { 
    14.     return ( 
    15.       
       
    16.          
    17.         this.gets()}>獲取 
    18.       
     
  •     ) 
  •   } 
  •  
  • export default Tables 
  • 規(guī)范化的方式依然是借助 ref 來(lái)實(shí)現(xiàn),只不過(guò)這個(gè) ref 是由 React 的內(nèi)置方法 createRef() 調(diào)用后生成的,在獲取時(shí),直接調(diào)用生成的 ref 就可以了。

    但是,需要注意,不論哪種方式,知道就行了,非受控表單,能不用就不要用,為啥啊?不受控制的東西,你也敢往家里領(lǐng)?

    又但是,正因?yàn)榉鞘芸乇韱螌⒄鎸?shí)數(shù)據(jù)儲(chǔ)存在 DOM 節(jié)點(diǎn)中,所以在使用非受控表單時(shí),有時(shí)候反而更容易同時(shí)集成 React 和非 React 代碼。如果你不介意代碼美觀性,并且希望快速編寫(xiě)代碼,使用非受控組件往往可以減少你的代碼量。否則,你應(yīng)該使用受控組件。

    總結(jié)

    在應(yīng)用頁(yè)面中,與用戶(hù)交互的基本都是在表單中呈現(xiàn)的。根據(jù) React 框架的設(shè)計(jì)理念,對(duì)于表單的渲染工作,肯定由框架負(fù)責(zé)的,而表單數(shù)據(jù)的交互必然需要收到框架的控制和依賴(lài),受控表單才是我們最應(yīng)該使用的表單方式,但是非受控表單明顯代碼更多,非受控表單是為了在特殊情況下獲取 Dom 而存在的,官方也不建議使用,即便非受控表單看起來(lái)更好用。

    至此,React 基本語(yǔ)法部分,算是告一段落,這一路走來(lái),我淚眼婆娑,我披荊斬棘,我彷徨迷惘,我真不容易……

    雖然不容易,但是,我那么好看,怎么可能這么結(jié)束了呢,不寫(xiě)個(gè)案例也太不像話了!


    當(dāng)前題目:受控和非受控表單|不受控制的東西,你非要往家領(lǐng)?
    瀏覽地址:http://www.5511xx.com/article/dpidodj.html