React.js 官方资料摘记:状态提升
来源:互联网 发布:淘宝有什么好的鞋店 编辑:程序博客网 时间:2024/06/06 03:34
状态提升
官网上那个例子很复杂,所以我在这里做了简化,说明的内容是一样的。
先说明一下实现目标:
- 有两个输入框,当一个输入框输入内容时,另一个自动输入相同内容
实现原理:
- 将两个输入框的
value
属性的值绑定到父类中去 - 将两个输入框的
onChange
事件交由父类进行处理
看不懂也没有关系,直接看代码就能弄懂了。
首先是基本的输入组件:
class InputNumber extends React.Component{ handleChange=()=>{ this.props.handleChange(event.target.value); } render(){ const inputNumber=this.props.number; return( <div> <input type="text" value={inputNumber} onChange={this.handleChange} /> </div> ); } }
上面组件中的input
设置了value
和onChange
都是父级组件传递进来的。
接着写调用该组件的父级组件:
class Caculator extends React.Component{ constructor(props){ super(props); this.state={number:""} } handleChange=(number)=>{ this.setState({number:number}); } render(){ const number=this.state.number; return ( <div> <InputNumber number={number} handleChange={this.handleChange} /> <InputNumber number={number} handleChange={this.handleChange} /> </div> ); } }
这里我们把两个InputNumber
组件的value
都绑定到了父组件Caculator
中,并且将他们的onChange
事件设置成了同一个事件,这时任何一个组件发生改变都会改变state
的值,而state
值的改变也会导致重新渲染页面,即input
的value
值。
上面代码的运行顺序是:
InputNumber
设置了value
和onChange
,只不过这两个值都在自于父组件传递进来的- 父组件将两个组件的
value
值保存在state
中,并设置了子组件要调用的onChange
事件对应的函数
这里思考一下,我们能不能在子组件InputNumber
中设置数据处理呢?答案是不行!因为子组件不能操作父组件的state
值。
下面我把全部代码贴出来,方便一起查看:
<!DOCTYPE html><html> <head> <meta charset="UTF-8" /> <title>Hello React!</title> <script src="https://cdn.bootcss.com/react/15.4.2/react.min.js"></script> <script src="https://cdn.bootcss.com/react/15.4.2/react-dom.min.js"></script> <script src="https://cdn.bootcss.com/babel-standalone/6.22.1/babel.min.js"></script> </head> <body> <div id="root"></div> <script type="text/babel"> {/*base input component*/} class InputNumber extends React.Component{ handleChange=()=>{ this.props.handleChange(event.target.value); } render(){ const inputNumber=this.props.number; return( <div> <input type="text" value={inputNumber} onChange={this.handleChange} /> </div> ); } } {/*controller component*/} class Caculator extends React.Component{ constructor(props){ super(props); this.state={number:""} } handleChange=(number)=>{ this.setState({number:number}); } render(){ const number=this.state.number; return ( <div> <InputNumber number={number} handleChange={this.handleChange} /> <InputNumber number={number} handleChange={this.handleChange} /> </div> ); } } ReactDOM.render( <Caculator />, document.getElementById("root") ); </script> </body></html>
阅读全文
0 0
- React.js 官方资料摘记:状态提升
- React.js 官方资料摘记:深入JSX
- React.js 官方资料摘记:组合 VS 继承
- React.js 官方文档摘记:表单
- React.js 官方文档摘记:非受控组件
- React.js 官网资料摘记:JSX简介
- React.js 官网资料摘记:元素渲染
- React.js 官网资料摘记:组件&Props
- React.js 官网资料摘记:State & 生命周期
- React.js 官网资料摘记:事件处理
- React.js 官网资料摘记:条件渲染
- React.js 官网资料摘记:列表&keys
- Vue.js官方文档摘记
- React.js 官网资料摘记:使用Prop-Types检查类型
- Vue.js 官方文档摘记:Vue 实例
- Vue.js 官方文档摘记:模板语法
- Vue.js 官方文档摘记 计算属性
- 10.React中文之提升状态
- 使用RTL-SDR和Matlab Simulink玩转软件无线电(五)
- of_iomap
- VMware 10.0.6最小化安装centos7
- 利用postgresql进行缓冲区内对象检测过程中遇到的sql查询效率问题解决方案记录
- systemctl命令使用方法和心得体会
- React.js 官方资料摘记:状态提升
- Mac抓包工具Charles乱码解决办法
- 24点解法
- solr环境搭建&基本使用
- js加密用户名(朱***牛)
- java访问修饰符&final使用
- Linux内存管理
- opencv_traincascade支持Haar和LBP特征
- ios MJRefresh 上拉死循环刷新问题