使用react实现手机号的数据同步显示功能的示例代码
本文介绍了使用react实现手机号的数据同步显示功能的示例代码,分享给大家,具体如下:
要求如下
- 输入框输入内容数据长度大于0,展示出预览信息
- 光标离开关闭预览信息
- 预览信息每隔4位插入一个特殊字符_,输入内容不变
- 限制长度为13位
- 只允许输入数字(0-9)
//Zinput.js
importReact,{
Component
}from'react';
import'./Zinput.css'
//NOTE:获取焦点事件原生onFocus即可
//NOTE:离开焦点事件原生onBlur即可
//NOTE:输入框数据过滤直接在change方法里进行过滤
//NOTE:条件处理通过不同条件返回不同节点做条件处理
classZinputextendsComponent{
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){
letval=event.target.value.substr(0,13)
.replace(/[^\d]/g,'')
event.target.value=val
this.setState({
value:val,
showBig:true,
});
}
/**
*根据字符串没隔len位插入一个下滑杠,返回处理后的字符串
*@methodgetStr
*@author朱阳星
*@datetime2018-04-02T09:57:58+080
*@emailzhuyangxing@foxmail.com
*@param{String}str待处理字符串
*@param{Number}len每隔位数插入下滑杠
*@return{String}处理后的字符串
*/
getStr(str,len){
letlenth=str.length
letlen1=len-1
letnewStr=''
for(vari=0;i0){
newStr+=str.charAt(i)+'_'
}else{
newStr+=str.charAt(i)
}
}
if(newStr.length%(len+1)===0){
//解决最后一位为补充项问题
newStr=newStr.substr(0,newStr.length-1)
}
returnnewStr
}
render(){
//NOTEreturn需要用圆括号包住并处理
//NOTE条件语句里没有节点也要用空字符串进行处理否则sonalint会报错,页面也会报错
constshowBig=this.state.showBig?(
{this.getStr(this.state.value,4)}
.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(