中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用react實現手機號的數據同步顯示功能的示例代碼

發布時間:2020-10-03 19:41:58 來源:腳本之家 閱讀:144 作者:朱陽星 欄目:web開發

本文介紹了使用react實現手機號的數據同步顯示功能的示例代碼,分享給大家,具體如下:

要求如下

  1. 輸入框輸入內容數據長度大于0,展示出預覽信息
  2. 光標離開關閉預覽信息
  3. 預覽信息每隔4位插入一個特殊字符_,輸入內容不變
  4. 限制長度為13位
  5. 只允許輸入數字(0-9)
// Zinput.js
import React, {
 Component
} from 'react';
import './Zinput.css'

// NOTE: 獲取焦點事件 原生onFocus 即可
// NOTE: 離開焦點事件 原生onBlur即可
// NOTE: 輸入框數據過濾 直接在change方法里進行過濾
// NOTE: 條件處理 通過不同條件返回不同節點做條件處理
class Zinput extends Component {
 constructor(props) {
  super(props);
  this.state = {
   value: '',
   showBig: false,
  };
  this.handleChange = this.handleChange.bind(this);
  this.inputOnFocus = this.inputOnFocus.bind(this);
  this.inputOnBlur = this.inputOnBlur.bind(this);
 }
 inputOnFocus() {
  if (this.state.value.length > 0) {
   this.setState({
    showBig: true
   })
  }
 }
 inputOnBlur() {
  this.setState({
   showBig: false
  })
  if(this.props.chanegNumber){
   this.props.chanegNumber(this.state.value)
  }
 }
 handleChange(event) {
  let val = event.target.value.substr(0, 13)
   .replace(/[^\d]/g, '')
  event.target.value = val
  this.setState({
   value: val,
   showBig: true,
  });
 }
 /**
  * 根據字符串沒隔len位插入一個下滑杠,返回處理后的字符串
  * @method  getStr
  * @author 朱陽星
  * @datetime 2018-04-02T09:57:58+080
  * @email  zhuyangxing@foxmail.com
  * @param  {String} str 待處理字符串
  * @param  {Number} len 每隔位數插入下滑杠
  * @return  {String} 處理后的字符串
  */
 getStr(str, len) {
  let lenth = str.length
  let len1 = len - 1
  let newStr = ''
  for (var i = 0; i < lenth; i++) {
   if (i % len === len1 && i > 0) {
    newStr += str.charAt(i) + '_'
   } else {
    newStr += str.charAt(i)
   }
  }
  if (newStr.length % (len + 1) === 0) {
   // 解決最后一位為補充項問題
   newStr = newStr.substr(0, newStr.length - 1)
  }
  return newStr
 }
 render() {
  // NOTE return 需要用圓括號包住并處理
  // NOTE 條件語句里沒有節點也要用空字符串進行處理 否則sonalint會報錯,頁面也會報錯
  const showBig = this.state.showBig ? (
   <div className="big-show">{ this.getStr(this.state.value,4) }</div>
  ) : ''
  return (
   <div className="zInput">
    <input className="input" 
        type = "text" 
        onFocus={ this.inputOnFocus }
        onBlur={ this.inputOnBlur }
        value={ this.state.value } 
        onChange={ this.handleChange }>
        </input>
    {showBig}
   </div>
  )
 }
}

export default Zinput; // Don't forget to use export default!

<!-- Zinput.css -->
.zInput{
  position: absolute;
  top:80px;
  left:40px;
  
}
.input {
 position: absolute;
 top: 0;
 left: 0;
}
.big-show {
  position: relative;
  top: -40px;
  font-size: 36px;
  line-height: 40px;
  background-color: red;
}

功能雖然實現,但是肯定是作為某個節點的某個子組件使用的,父組件調用方法有兩種

1.使用refs直接獲取子組件state的值

constructor(props) {
 super(props);
 this.handerClick2 = this.handerClick2.bind(this);
}
handerClick2(){
 // NOTE 父組件通過refs獲取子組件的state 
 console.log("使用ref獲取子組件的值",this.refs.zinput.state.value)
}
render() {
 return (
  <div className="App">
   <Zinput ref="zinput"></Zinput>
   <input type="button" value="獲取電話號碼的值22" onClick={ this.handerClick2 }/>
  </div> 
 );
}

2.每次子組件焦點離開時調用父組件傳過來的方法,修改父組件state值

constructor(props) {
 super(props);
 this.state = {
  phoneNumber: '',
 };
 this.handerClick = this.handerClick.bind(this);
 this.changePhoneNumber = this.changePhoneNumber.bind(this);
}
changePhoneNumber(number){
 this.setState({
   phoneNumber: number,
 })
}
handerClick(){
 // NOTE 根據react的思想是在子組件處理完某件事的時候調用父組件的方法修改父組件的state值
 console.log("使用state獲取值",this.state.phoneNumber)
}
render() {
 return (
  <div className="App">
   <Zinput ref="zinput" chanegNumber={this.changePhoneNumber}></Zinput>
   <input type="button" value="獲取電話號碼的值" onClick={ this.handerClick }/>
  </div>
 );
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

北票市| 克山县| 林甸县| 平乡县| 阳新县| 玛沁县| 疏勒县| 公安县| 西青区| 宣汉县| 获嘉县| 静宁县| 舒兰市| 光山县| 高碑店市| 垫江县| 芮城县| 营山县| 河东区| 孝义市| 浮梁县| 贵州省| 治多县| 靖远县| 南陵县| 微山县| 三明市| 岗巴县| 合江县| 修水县| 繁昌县| 东乡族自治县| 黎城县| 张家川| 弥渡县| 揭阳市| 天台县| 陇南市| 宁都县| 雷波县| 岳普湖县|