• 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>
  • 相关阅读:
    安装、设置与启动MySql5.1.30绿色版的方法
    可执行jar包的maven配置
    Maven配置文件说明
    Maven常用命令
    eclipse下创建maven工程
    [Linux]常用命令与目录全拼
    Linux的端口和服务
    TortoiseSVN
    SpringCloud-断路器(Hystrix)
    SpringCloud-服务的消费者(Feign)
  • 原文地址:https://www.cnblogs.com/daomul/p/4857377.html
Copyright © 2020-2023  润新知