视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
react做出手机数据同步显示在界面功能
2020-11-27 19:50:54 责编:小采
文档


这次给大家带来react做出手机数据同步显示在界面功能,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 ? (
 <p className="big-show">{ this.getStr(this.state.value,4) }</p>
 ) : ''
 return (
 <p className="zInput">
 <input className="input" 
 type = "text" 
 onFocus={ this.inputOnFocus }
 onBlur={ this.inputOnBlur }
 value={ this.state.value } 
 onChange={ this.handleChange }>
 </input>
 {showBig}
 </p>
 )
 }
}
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 (
 <p className="App">
 <Zinput ref="zinput"></Zinput>
 <input type="button" value="获取电话号码的值22" onClick={ this.handerClick2 }/>
 </p> 
 );
}

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 (
 <p className="App">
 <Zinput ref="zinput" chanegNumber={this.changePhoneNumber}></Zinput>
 <input type="button" value="获取电话号码的值" onClick={ this.handerClick }/>
 </p>
 );
}

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

懒加载过程中添加loading

babel转换es6方法实现

下载本文
显示全文
专题