“React组件间通信”学习笔记
发布时间:2020-12-15 03:31:37 所属栏目:百科 来源:网络整理
导读:React没有双向通信那么自由,而是单向的,即从父组件到子组件。 父组件-子组件:props 子组件-父组件:callback 子组件-子组件:子组件通过回调改变父组件中的状态,通过props再修改另一个组件的状态 父子组件间通信 var CalendarControl = React.createClas
React没有双向通信那么自由,而是单向的,即从父组件到子组件。
父子组件间通信var CalendarControl = React.createClass({ getDefaultProps: function () { var newDate = new Date(); return { year: util.formatDate(newDate,'yyyy'),month: parseInt(util.formatDate(newDate,'MM')),day: parseInt(util.formatDate(newDate,'dd')) }; },render: function () { return ( <div> <CalendarHeader year="this.props.year" month="this.props.month" day="this.props.day"/> </div> ) } }); 子父组件间通信var CalendarControl = React.createClass({ getInitialState: function () { var newDate = new Date(); return { year: util.formatDate(newDate,//给子组件一个回调函数,用来更新父组件的状态,然后影响另一个组件 handleFilterUpdate: function (filterYear,filterMonth) { this.setState({ year: filterYear,month: filterMonth }); },render: function () { return ( <div> <CalendarHeader updateFilter={this.handleFilterUpdate}/> </div> ) } }); var CalendarHeader = React.createClass({ getInitialState: function () { var newDate = new Date(); return { year: util.formatDate(newDate,//设置默认年为今年 month: parseInt(util.formatDate(newDate,'MM'))//设置默认日为今天 }; },handleLeftClick: function () { var newMonth = parseInt(this.state.month) - 1; var year = this.state.year; if (newMonth < 1) { year--; newMonth = 12; } this.state.month = newMonth; this.state.year = year; this.setState(this.state);//在设置了state之后需要调用setState方法来修改状态值, //每次修改之后都会自动调用this.render方法,再次渲染组件 this.props.updateFilter(year,newMonth); },handleRightClick: function () { var newMonth = parseInt(this.state.month) + 1; var year = this.state.year; if (newMonth > 12) { year++; newMonth = 1; } this.state.month = newMonth; this.state.year = year; this.setState(this.state);//在设置了state之后需要调用setState方法来修改状态值, //每次修改之后都会自动调用this.render方法,再次渲染组件,以此向父组件通信 this.props.updateFilter(year,render: function () { return ( <div className="headerborder"> <p>{this.state.month}月</p> <p>{this.state.year}年</p> <p className="triangle-left" onClick={this.handleLeftClick}> </p> <p className="triangle-right" onClick={this.handleRightClick}> </p> </div> ) } }); 兄弟组件间通信var CalendarControl = React.createClass({ getInitialState: function () { var newDate = new Date(); return { year: util.formatDate(newDate,month: filterMonth });//刷新父组件状态 },render: function () { return ( <div> <CalendarHeader updateFilter={this.handleFilterUpdate}/> <CalendarBody year={this.state.year} month={this.state.month} day={this.state.day} />//父组件状态被另一个子组件刷新后,这个子组件就会被刷新 </div> ) } }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c – 消息框中的“不再显示此选项”选项
- 静默安装Oracle 11g过程中提示:Exception in thread "
- Unity3d 读写XML文件
- Grade重复依赖解决方案-compileOnly
- 由于CredSSP加密Oracle修正 导致远程桌面报错处理
- Flex 验证邮箱地址
- cocos2d-x 3.x取消dumpCachedTextureInfo代之以getCachedTe
- [RN] React Native 使用 react-native-camera 过程中报错 F
- PNP管理器简析--基于ReactOS0.33
- COBOL access Oracle database sample