使用react实现手机号的数据同步显示功能的示例代码


Posted in Javascript onApril 03, 2018

本文介绍了使用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>
 );
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery mobile事件多次绑定示例代码
Sep 13 Javascript
javascript四舍五入函数代码分享(保留后几位)
Dec 10 Javascript
js限制checkbox选中个数以限制六个为例
Jul 15 Javascript
node.js中的events.emitter.removeListener方法使用说明
Dec 10 Javascript
jQuery插件Validate实现自定义表单验证
Jan 18 Javascript
基于JavaScript实现弹出框效果
Feb 19 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
May 08 jQuery
Angular2 http jsonp的实例详解
Aug 31 Javascript
JavaScript for循环 if判断语句(学习笔记)
Oct 11 Javascript
JS中准确判断变量类型的方法
Jun 01 Javascript
微信小程序抽奖组件的使用步骤
Jan 11 Javascript
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
JS遍历DOM文档树的方法实例详解
Apr 03 #Javascript
JavaScript同源策略和跨域访问实例详解
Apr 03 #Javascript
vue 组件中slot插口的具体用法
Apr 03 #Javascript
react 实现页面代码分割、按需加载的方法
Apr 03 #Javascript
深入浅析Vue中的slots/scoped slots
Apr 03 #Javascript
使用FileReader API创建Vue文件阅读器组件
Apr 03 #Javascript
vue内置指令详解
Apr 03 #Javascript
You might like
PHP 和 MySQL 基础教程(四)
2006/10/09 PHP
发挥语言的威力--融合PHP与ASP
2006/10/09 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
jquery select操作的日期联动实现代码
2009/12/06 Javascript
JQuery Tips(3) 关于$()包装集内元素的改变
2009/12/14 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
Python脚本后台运行的几种方式
2015/03/09 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
1秒50万字!js实现关键词匹配
2016/08/01 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
python重试装饰器示例
2014/02/11 Python
从零学Python之引用和类属性的初步理解
2014/05/15 Python
Python实现的选择排序算法示例
2017/11/29 Python
Python tkinter label 更新方法
2018/10/11 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
详解python中list的使用
2019/03/15 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
岗位职责怎么写
2014/03/14 职场文书
岗位职责说明书
2014/05/07 职场文书
英语教研活动总结
2014/07/02 职场文书
英语辞职信怎么写
2015/02/28 职场文书
电力工程合作意向书
2015/05/11 职场文书
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js
Vue Element plus使用方法梳理
2022/12/24 Vue.js