React组件协同使用
发布时间:2020-12-15 08:28:27 所属栏目:百科 来源:网络整理
导读:组件协同的本质是对组件的一种组织、管理方式。 1.组件嵌套 2.Mixin(混入,把一段代码混到组件中) 一、组件嵌套 本质是父子关系。 父组件 —(属性)—子组件 子组件—(事件处理函数(委托))—父组件 优点: 逻辑清晰:父子关系 代码模块化:同步开发 封
组件协同的本质是对组件的一种组织、管理方式。 1.组件嵌套 2.Mixin(混入,把一段代码混到组件中)
一、组件嵌套 本质是父子关系。 父组件 —(属性)—子组件 子组件—(事件处理函数(委托))—父组件 优点: 逻辑清晰:父子关系 代码模块化:同步开发 封装细节 缺点: 编写难度高:处理父子关系 无法掌握细节
实例代码如下:
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>父子关系</title> </head> <body> <script src="./build/react.js"></script> <script src="./build/JSXTransformer.js"></script> <script type="text/jsx"> var GenderSelect = React.createClass({ render: function() { return <select onChange={this.props.handleSelect}> <option value="0">男</option> <option value="1">女</option> </select> } }) var SignupForm = React.createClass({ getInitialState: function() { return { name: '',password: '',gender: '',} },handleChange: function(name,event) { var newState = {} newState[name] = event.target.value this.setState(newState) },handleSelect: function(event) { this.setState({gender: event.target.value}) },render: function() { console.log(this.state) return <form> <input type="text" placeholder="请输入用户名" onChange={this.handleChange.bind(this,'name')} /> <input type="password" placeholder="请输入密码" onChange={this.handleChange.bind(this,'password')} /> <GenderSelect handleSelect={this.handleSelect}></GenderSelect> </form> } }) React.render(<SignupForm></SignupForm>,document.body); </script> </body> </html> 二、Mixin编写和使用 Mixin=一组方法 Mixin的目的是横向抽离出组件的相似代码 相似概念:面向切面编程、插件 优点: 代码复用 即插即用 适应性强 缺点: 编写难度高 降低代码可读性 代码如下:
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>Mixin</title> </head> <body> <script src="./build/react.js"></script> <script src="./build/JSXTransformer.js"></script> <script type="text/jsx"> /*var BindingExample = React.createClass({ getInitialState:function () { return { text:'' } }, handleChange:function (event) { this.setState({text:event.target.value}); }, render:function () { return <div> <input type="text" placeholder="请输入内容" onChange={this.handleChange}/> <p>{this.state.text}</p> </div> } });*/ var BindingMixin = { handleChange:function (key) { var that = this; return function () { var newState = {}; newState[key] = event.target.value; that.setState(newState); } },}; var BindingExample = React.createClass({ mixins:[BindingMixin],getInitialState:function () { return { text:'',comment:'' } },render:function () { return <div> <input type="text" placeholder="请输入内容" onChange={this.handleChange('text')}/> <textarea onChange={this.handleChange('comment')}></textarea> <p>{this.state.text}</p> <p>{this.state.comment}</p> </div> } }); React.render( <BindingExample></BindingExample>,document.body ); </script> </body> </html> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- AJAX可以传输哪些数据格式?
- c# – MSMQ连接缓存安全漏洞?
- c# – 在Mongo .NET 2.0驱动程序中捕获MongoAuthentication
- c – 矢量的容量在push_back()之后变化
- TexturePacker 4.X 在Cocos2d-x 3.x 中帧动画实现(官方文档
- Access、Hybrid和Trunk端口
- 具有OnComplete的Ajax.BeginForm始终更新页面
- 使用tinyxml读xml文件信息到结构体
- ORA-01034:oracle not available. ORA-27101:shared memory
- 用 CocoaPods 安装 React Native