国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

學(xué)習(xí)React中ref的兩個demo示例

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:10:03
文檔

學(xué)習(xí)React中ref的兩個demo示例

學(xué)習(xí)React中ref的兩個demo示例:為了擺脫繁瑣的Dom操作, React提倡組件化, 組件內(nèi)部用數(shù)據(jù)來驅(qū)動視圖的方式,來實現(xiàn)各種復(fù)雜的業(yè)務(wù)邏輯 ,然而,當(dāng)我們?yōu)樵糄om綁定事件的時候, 還需要通過組件獲取原始的Dom, 而React也提供了ref為我們解決這個問題. 為什么不能從組件直接獲取Dom?
推薦度:
導(dǎo)讀學(xué)習(xí)React中ref的兩個demo示例:為了擺脫繁瑣的Dom操作, React提倡組件化, 組件內(nèi)部用數(shù)據(jù)來驅(qū)動視圖的方式,來實現(xiàn)各種復(fù)雜的業(yè)務(wù)邏輯 ,然而,當(dāng)我們?yōu)樵糄om綁定事件的時候, 還需要通過組件獲取原始的Dom, 而React也提供了ref為我們解決這個問題. 為什么不能從組件直接獲取Dom?

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

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

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

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

使用場景

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

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

// React組件準(zhǔ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;

自動聚焦input動畫演示

使用場景

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

實現(xiàn)思路:

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

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

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

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

 

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

// React組件準(zhǔ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()
 }

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

 }
 // 當(dāng)輸入數(shù)字時
 if (["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"].includes(event.key)){
 // 如果當(dāng)前輸入的字符個數(shù)取余為0, 則先添加一個空格
 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>銀行卡號 隔四位加空格 demo</p>
 <input ref={this.inputRef} value={this.state.showTxt}/>
 </div>
 );
 }
}

export default App;

小結(jié):

虛擬Dom雖然能夠提升網(wǎng)頁的性能, 但虛擬 DOM 是拿不到用戶輸入的。為了獲取文本輸入框的一些操作, 還是js原生的事件綁定機制最好用~

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

學(xué)習(xí)React中ref的兩個demo示例

學(xué)習(xí)React中ref的兩個demo示例:為了擺脫繁瑣的Dom操作, React提倡組件化, 組件內(nèi)部用數(shù)據(jù)來驅(qū)動視圖的方式,來實現(xiàn)各種復(fù)雜的業(yè)務(wù)邏輯 ,然而,當(dāng)我們?yōu)樵糄om綁定事件的時候, 還需要通過組件獲取原始的Dom, 而React也提供了ref為我們解決這個問題. 為什么不能從組件直接獲取Dom?
推薦度:
標(biāo)簽: 實例 demo ref
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 五月激情综合网 | 在线精品亚洲欧洲第一页 | 精品一区二区三区免费毛片爱 | 国产网站免费在线观看 | 欧美日本一道本 | 亚洲一区二区免费看 | 天堂va欧美ⅴa亚洲va一国产 | 精品久久久久久久一区二区手机版 | 欧美另类日韩中文色综合 | 国内精品久久久久久久97牛牛 | 另类欧美日韩 | 国产成人精品一区二三区在线观看 | 国产精品免费视频网站 | 国产一区系列在线观看 | 天天躁日日躁狠狠躁中文字幕老牛 | 最新国产精品精品视频 | 久久久久久久国产高清 | 国产一区三区二区中文在线 | 国产成人久久精品亚洲小说 | 女人18毛片a级毛片一区②区 | 中文字幕有码在线观看 | 亚洲精品免费在线观看 | 国产在线观看一区二区三区 | 2022国产精品福利在线观看 | 亚洲国产精品日韩一线满 | 91精品国产色综合久久 | 国产成人高清亚洲一区久久 | 日韩有码在线播放 | 国产特级全黄一级毛片不卡 | 国产手机在线αⅴ片无码观看 | 成人国产精品一级毛片视频 | 国产成人精品一区二区三区 | 欧美 日韩 中文字幕 | 久久精品国产亚洲 | 亚洲一区二区三区免费视频 | 精品一区二区在线 | 欧美视频免费在线观看 | 中文日韩欧美 | 亚洲国产精品电影 | 国产精选免费视频 | 欧美精品日韩一区二区三区 |