为了账号安全,请及时绑定邮箱和手机立即绑定

能否通过react源码解释一下这个是怎么实现的么

能否通过react源码解释一下这个是怎么实现的么

湖上湖 2019-03-12 13:15:27
import React from 'react'import PureRenderMixin from 'react-addons-pure-render-mixin'import './style.less'class SearchInput extends React.Component {    constructor(props, context) {        super(props, context);        this.shouldComponentUpdate = PureRenderMixin.shouldComponentUpdate.bind(this);        this.state = {            value: ''        }    }    render() {        return (            <input                className="search-input"                 type="text"                 placeholder="请输入关键字"                 onChange={this.ChangeHandle.bind(this)}                onKeyUp={this.KeyUpHandle.bind(this)}                value={this.state.value}/>        )    }    componentDidMount() {        // 默认值        this.setState({            value: this.props.value || ''        })    }    ChangeHandle(e) {        // 监控变化        this.setState({            value: e.target.value        })    }    KeyUpHandle(e) {        // 监控 enter 事件        if (e.keyCode !== 13) {            return        }        this.props.enterHandle(e.target.value)    }}export default SearchInputonChange={this.ChangeHandle.bind(this)}value={this.state.value}一开始一直以为是个死循环。设置了value以后重新给input赋值。赋值以后再触发onChange 。这不就是死循环了么。但是没有出现死循环。而且React官方也比较推荐这种写法--请问源码是怎么处理的呢
查看完整描述

5 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

不会发生死循环,setState给value这个字段重新赋值,也不会主动触发绑定的onChange事件,状态改变,视图将重新渲染,并不会主动去触发绑定的事件


查看完整回答
反对 回复 2019-03-30
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

一句话解释:react是单向数据绑定。


查看完整回答
反对 回复 2019-03-30
?
RISEBY

TA贡献1856条经验 获得超5个赞

onChange只会在input元素发生DOMchange事件时触发,重新赋值过程不会发生事件,所以不会循环


查看完整回答
反对 回复 2019-03-30
  • 5 回答
  • 0 关注
  • 458 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信