React 组件协同关系

组件协同的两种方法,1种是纵向的协同,就是组件嵌套,重点在于代码的封装,2种是横向协同也就是Mixin,组件抽离,重点在于代码复用

1、组件嵌套,父组件通过属性向子组件,子组件可以通过事件处理函数以委托的方式想父组件发送数据

 1 <!DOCTYPE html>
 2 <html>
 3   <head>
 4     <meta http-equiv=‘Content-type‘ content=‘text/html; charset=utf-8‘>
 5     <title>daomul‘s example</title>
 6     <link rel="stylesheet" href="../shared/css/base.css" />
 7   </head>
 8   <body>
 9     <h1>Text demo</h1>
10     <div id="container">
11
12     </div>
13
14     <script src="../shared/thirdparty/es5-shim.min.js"></script>
15     <script src="../shared/thirdparty/es5-sham.min.js"></script>
16     <script src="../shared/thirdparty/console-polyfill.js"></script>
17     <script src="../../build/react.js"></script>
18     <script src="../../build/JSXTransformer.js"></script>
19     <script type="text/jsx">
20
21     //选择组件
22     var GenderSelect = React.createClass({
23
24         render:function(){
25           console.log("render,4");
26           return <select onChange = {this.props.handleSelect}>
27           <option value = "0">男</option>
28           <option value = "1">女</option>
29           </select>;
30         },
31     });
32
33     //表单组件
34     var SignupForm = React.createClass({
35       getInitialState:function(){
36         return {
37           name :‘‘,
38           password:‘‘,
39           gender:0,
40         };
41       },
42       handleChange:function(name,event){
43         var newState = {};
44         newState[name] = event.target.value;
45         this.setState(newState);
46       },
47       handleSelect:function(event){
48         this.setState({gender:event.target.value});
49       },
50       render:function(){
51         console.log(this.state);
52         return <form>
53             <input type = "text" placeholder = "请输入用户名" onChange = {this.handleChange.bind(this,‘name‘)} ></input>
54             <input type = "text" placeholder = "请输入密码" onChange = {this.handleChange.bind(this,‘password‘)} ></input>
55             <GenderSelect type="text" handleSelect = {this.handleSelect}></GenderSelect>
56           </form>;
57       },
58     });
59
60     React.render(<SignupForm></SignupForm> ,document.body);
61
62     </script>
63   </body>
64 </html>

2、Mixin就是 横向抽离相似的代码

 1 <!DOCTYPE html>
 2 <html>
 3   <head>
 4     <meta http-equiv=‘Content-type‘ content=‘text/html; charset=utf-8‘>
 5     <title>daomul‘s example</title>
 6     <link rel="stylesheet" href="../shared/css/base.css" />
 7   </head>
 8   <body>
 9     <h1>Text demo</h1>
10     <div id="container">
11
12     </div>
13
14     <script src="../shared/thirdparty/es5-shim.min.js"></script>
15     <script src="../shared/thirdparty/es5-sham.min.js"></script>
16     <script src="../shared/thirdparty/console-polyfill.js"></script>
17     <script src="../../build/react.js"></script>
18     <script src="../../build/JSXTransformer.js"></script>
19     <script type="text/jsx">
20
21     //Mixin
22     var BindMixin = {
23       handleChange:function(key){
24         //先将this保存起来是因为在js中,方法内部再调用函数的话会使得this的丢失
25         var self = this
26         //这个变量如果放在function内部的话会加大构建的内存损耗
27         var newState = {}
28         return function(event){
29           //这里不能直接使用self.setState({key:event.targe.value})
30           //因为key是作为‘key‘字符串的存在传入的
31           newState[key] = event.target.value
32           self.setState(newState)
33         }
34       }
35     }
36     var TextClass = React.createClass({
37
38       //这里就是作为对Mixin的使用
39       mixins : [BindMixin],
40       getInitialState:function(){
41         return {
42           name :‘‘,
43           password:‘‘,
44         };
45       },
46       render:function(){
47         return <div>
48             <input type = "text" placeholder = "请输入用户名" onChange = {this.handleChange(‘name‘)} ></input>
49             <input type = "text" placeholder = "请输入密码" onChange = {this.handleChange(‘password‘)} ></input>
50             <p>{this.state.name}</p>
51             <p>{this.state.password}</p>
52           </div>;
53       },
54     });
55
56     React.render(<TextClass></TextClass> ,document.body);
57
58     </script>
59   </body>
60 </html>
时间: 2024-10-10 13:35:14

React 组件协同关系的相关文章

React 组件间通讯

React 组件间通讯 说 React 组件间通讯之前,我们先来讨论一下 React 组件究竟有多少种层级间的关系.假设我们开发的项目是一个纯 React 的项目,那我们项目应该有如下类似的关系: 父子:Parent 与 Child_1.Child_2.Child_1_1.Child_1_2.Child_2_1 兄弟:Child_1 与 Child_2.Child_1_1 与 Child_2.etc. 针对这些关系,我们将来好好讨论一下这些关系间的通讯方式. (在 React 中,React 组

React.js学习笔记(一):组件协同与mixin

组件协同: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>父子关系</title> </head> <body> <script src="react.js"></script> <script src="JSXTran

React 组件复合

React组件复合 · 通过React写组件时,应当尽可能地将组件分为更小的更多的组件,然后再复合组件. 比如下面的评论组件就是一个组件,一个庞大的组件,这时我们还没有将之分解,更没有复合: function Comment(props) { return ( <div className="Comment"> <div className="UserInfo"> <img className="Avatar" sr

二、React初体验之React组件创建

(中间因为应付各种考试,处理其他事情,隔了好时间没更新,现在终于有时间了,续上!) 本文为React初始体验,因此先不考虑文件如何组织,尽量以最简单的方式让大家了解React其中的原理. 在创建组件(component)之前,大家首先需要了解一些基础知识.有ES6.JSX语法等基础知识的同学请跳过下面一段. ES6是JavaScript的最新标准,里面新增了许多语法方式,甚至出现了“类”的继承方式,我个人暂且把他们理解为新增了许多“语法糖”,这些“语法糖”可能带给老手的是方便,而对于我们这些菜鸟

React 组件之间如何交流

原文  http://blog.51yuekan.com/2015/07/23/2015-07-19-react-component-communicate/ 主题 React 前言 今天群里面有很多都在问关于 React 组件之间是如何通信的问题,之前自己写的时候也遇到过这类问题.下面是我看到的一篇不错英文版的翻译,看过我博客的人都知道,我翻译可能不会按部就班,会尽可能用中文的意思,来将作者要讲述的技术描述清楚.英文能力有限,如果有不对的地方请跟我留言,一定修改--^_^ 原著序 处理 Rea

React组件开发

目录: 属性:props 内联样式 状态记忆 : state 生命周期 访问DOM 表单输入 承接快速入门篇:http://www.cnblogs.com/jasonnode/p/4444504.html 属性 : props 组件应该提供一些属性供开发者在不同的场景下可以对组件实例元素的行为 外观进行调整,这样可以提高组件的利用效率. 在React中,使用props字段访问实例元素的属性. 例如,在下面的JSX片段中,EzLampComp组件的实例元素有一个属性onoff: React.ren

react组件数据通信---扩展(2)

对于react来说使用redux来管理状态是个不错的方案,redux是个很好的数据管理框架.但是redux并不是专门给react定制的数据管理框架,所以用它来管理react的数据也只能是凑合着用.redux麻烦的数据操作让我很反感,所以我想弄出一套适合自己的数据管理方式. 思路如下:扩展react的基类Component,扩展的基类构造里监听组件里的数据.监听的列表其实就是一个完整的状态树,组件名与组件的状态数据 一 一对应关系(组件与数据之间清晰的关系),整个页面的操作我只需要维护这个状态树.

设计react组件

首先作为一个合格的开发者,不要只满足于编写出了可以运行的代码,而耍了解代码背 后的工作原理;不要只满足于自己编写的程序能够运行,还要让自己的代码可读而且易 于维护 . 这样才能开发出高质量的软件 . 易于维护组件的设计要素 作为软件设计的通则,组件的划分要满足高内聚(High Cohesion)和低耦合(Low Coupling)的原则 . 高内聚指的是把逻辑紧密相关的内容放在一个组件中 . 用户界面无外乎内容 . 交互 行为和样式 . 传统上,内容由 HTML 表示,交互行放在 JavaScr

React组件通信的几种方式

需要组件之进行通信的几种情况? 父组件向子组件通信?? 子组件向父组件通信?? 跨级组件通信?? 没有嵌套关系组件之间的通信? 1. 父组件向子组件通信React数据流动是单向的,父组件向子组件通信也是最常见的;父组件通过props向子组件传递需要的信息?Child.jsximport?React?from?'react';import?PropTypes?from?'prop-types';export?default?function?Child({?name?})?{????return?