成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

React中ref的示例分析-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)React中ref的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

目前創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、云安網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

為了擺脫繁瑣的Dom操作, React提倡組件化, 組件內(nèi)部用數(shù)據(jù)來(lái)驅(qū)動(dòng)視圖的方式,來(lái)實(shí)現(xiàn)各種復(fù)雜的業(yè)務(wù)邏輯 ,然而,當(dāng)我們?yōu)樵糄om綁定事件的時(shí)候, 還需要通過(guò)組件獲取原始的Dom, 而React也提供了ref為我們解決這個(gè)問(wèn)題.

為什么不能從組件直接獲取Dom?

組件并不是真實(shí)的 DOM 節(jié)點(diǎn),而是存在于內(nèi)存之中的一種數(shù)據(jù)結(jié)構(gòu),叫做虛擬 DOM (virtual DOM)。只有當(dāng)它插入文檔以后,才會(huì)變成真實(shí)的 DOM

如果需要從組件獲取真實(shí) DOM 的節(jié)點(diǎn),就要用到官方提供的ref屬性

使用場(chǎng)景

當(dāng)用戶加載頁(yè)面后, 默認(rèn)聚焦到input框

import React, { Component } from 'react';
import './App.css';

// React組件準(zhǔn)確捕捉鍵盤(pán)事件的demo

class App extends Component {
 constructor(props) {
  super(props)
  this.state = {
   showTxt: ""
  }

  this.inputRef = React.createRef();
 }

 // 為input綁定事件
 componentDidMount(){
  this.inputRef.current.addEventListener("keydown", (event)=>{
   this.setState({showTxt: event.key})
  })

  // 默認(rèn)聚焦input輸入框
  this.inputRef.current.focus()
 }

 render() {
  return (
   <div className="app">
    <input ref={this.inputRef}/>
    <p>當(dāng)前輸入的是: <span>{this.state.showTxt}</span></p>
   </div>
  );
 }
}

export default App;

自動(dòng)聚焦input動(dòng)畫(huà)演示

React中ref的示例分析

使用場(chǎng)景

為了更好的展示用戶輸入的銀行卡號(hào), 需要每隔四個(gè)數(shù)字加一個(gè)空格

實(shí)現(xiàn)思路:

當(dāng)用戶輸入的字符個(gè)數(shù), 可以被5整除時(shí), 額外加一個(gè)空格

當(dāng)用戶刪除數(shù)字時(shí),遇到空格, 要移除兩個(gè)字符(一個(gè)空格, 一個(gè)數(shù)字),

為了實(shí)現(xiàn)以上想法, 必須獲取鍵盤(pán)的BackSpace事件, 重寫(xiě)刪除的邏輯

限制為數(shù)字, 隔四位加空格

React中ref的示例分析 

import React, { Component } from 'react';
import './App.css';

// React組件準(zhǔn)確捕捉鍵盤(pán)事件的demo
class App extends Component {
 constructor(props) {
  super(props)
  this.state = {
   showTxt: ""
  }

  this.inputRef = React.createRef();
  this.changeShowTxt = this.changeShowTxt.bind(this);
 }

 // 為input綁定事件
 componentDidMount(){
  this.inputRef.current.addEventListener("keydown", (event)=>{
   this.changeShowTxt(event);
  });
  // 默認(rèn)聚焦input輸入框
  this.inputRef.current.focus()
 }

 // 處理鍵盤(pán)事件
 changeShowTxt(event){
  // 當(dāng)輸入刪除鍵時(shí)
  if (event.key === "Backspace") {
   // 如果以空格結(jié)尾, 刪除兩個(gè)字符
   if (this.state.showTxt.endsWith(" ")){
    this.setState({showTxt: this.state.showTxt.substring(0, this.state.showTxt.length-2)})
   // 正常刪除一個(gè)字符
   }else{
    this.setState({showTxt: this.state.showTxt.substring(0, this.state.showTxt.length-1)})
   }

  }
  // 當(dāng)輸入數(shù)字時(shí)
  if (["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"].includes(event.key)){
   // 如果當(dāng)前輸入的字符個(gè)數(shù)取余為0, 則先添加一個(gè)空格
   if((this.state.showTxt.length+1)%5 === 0){
    this.setState({showTxt: this.state.showTxt+' '})
   }
   this.setState({showTxt: this.state.showTxt+event.key})
  }
 }

 render() {
  return (
   <div className="app">
    <p>銀行卡號(hào) 隔四位加空格 demo</p>
    <input ref={this.inputRef} value={this.state.showTxt}/>
   </div>
  );
 }
}

export default App;

感謝各位的閱讀!關(guān)于“React中ref的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

名稱欄目:React中ref的示例分析-創(chuàng)新互聯(lián)
本文URL:http://jinyejixie.com/article22/csdsjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器微信公眾號(hào)、動(dòng)態(tài)網(wǎng)站、品牌網(wǎng)站制作靜態(tài)網(wǎng)站、軟件開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
宜宾县| 资阳市| 安吉县| 苍梧县| 大邑县| 井陉县| 五华县| 镇原县| 农安县| 乌兰察布市| 塔城市| 邯郸县| 宁波市| 淳化县| 江津市| 古丈县| 博兴县| 宜昌市| 安徽省| 武乡县| 察雅县| 安化县| 十堰市| 乌什县| 安阳县| 乌鲁木齐县| 旬阳县| 琼海市| 元氏县| 武陟县| 宁津县| 视频| 汝州市| 黄龙县| 娄烦县| 郸城县| 宜宾县| 襄樊市| 平舆县| 武平县| 宜兴市|