欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2018年08月14日 09:34:03   作者:木子昭  
這篇文章主要介紹了學(xué)習(xí)React中ref的兩個(gè)demo示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

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

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

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

如果需要從組件獲取真實(shí) DOM 的節(jié)點(diǎn),就要用到官方提供的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;

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

使用場景

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

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

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

當(dāng)用戶刪除數(shù)字時(shí),遇到空格, 要移除兩個(gè)字符(一個(gè)空格, 一個(gè)數(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)輸入刪除鍵時(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>銀行卡號 隔四位加空格 demo</p>
    <input ref={this.inputRef} value={this.state.showTxt}/>
   </div>
  );
 }
}

export default App;

小結(jié):

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • React SSR樣式及SEO的實(shí)踐

    React SSR樣式及SEO的實(shí)踐

    這篇文章主要介紹了React SSR樣式及SEO的實(shí)踐,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • 詳解vant2 自動(dòng)檢查表單驗(yàn)證 -validate

    詳解vant2 自動(dòng)檢查表單驗(yàn)證 -validate

    這篇文章主要介紹了vant2 自動(dòng)檢查表單驗(yàn)證 -validate,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • 三分鐘搞懂react-hooks及實(shí)例代碼

    三分鐘搞懂react-hooks及實(shí)例代碼

    React?Hooks是今年最勁爆的新特性真的毫不夸張。如果你也對react感興趣,或者正在使用react進(jìn)行項(xiàng)目開發(fā),請抽出點(diǎn)時(shí)間閱讀下此文
    2022-03-03
  • react實(shí)現(xiàn)同頁面三級跳轉(zhuǎn)路由布局

    react實(shí)現(xiàn)同頁面三級跳轉(zhuǎn)路由布局

    這篇文章主要為大家詳細(xì)介紹了react實(shí)現(xiàn)同頁面三級跳轉(zhuǎn)路由布局,一個(gè)路由小案例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 詳解react組件通訊方式(多種)

    詳解react組件通訊方式(多種)

    這篇文章主要介紹了詳解react組件通訊方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • React組件實(shí)例三大核心屬性State props Refs詳解

    React組件實(shí)例三大核心屬性State props Refs詳解

    組件實(shí)例的三大核心屬性是:State、Props、Refs。類組件中這三大屬性都存在。函數(shù)式組件中訪問不到 this,也就不存在組件實(shí)例這種說法,但由于它的特殊性(函數(shù)可以接收參數(shù)),所以存在Props這種屬性
    2022-12-12
  • 詳解在React中跨組件分發(fā)狀態(tài)的三種方法

    詳解在React中跨組件分發(fā)狀態(tài)的三種方法

    這篇文章主要介紹了詳解在React中跨組件分發(fā)狀態(tài)的三種方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • React Native 圖片查看組件的方法

    React Native 圖片查看組件的方法

    這篇文章主要介紹了React Native 圖片查看組件的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • React父子組件傳值(組件通信)的實(shí)現(xiàn)方法

    React父子組件傳值(組件通信)的實(shí)現(xiàn)方法

    本文主要介紹了React父子組件傳值(組件通信)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • React?Native實(shí)現(xiàn)Toast輕提示和loading效果

    React?Native實(shí)現(xiàn)Toast輕提示和loading效果

    這篇文章主要介紹了React Native實(shí)現(xiàn)Toast輕提示和loading效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09

最新評論