• React入门介绍(2)- React Component-React组件


    React Component-React组件

    允许用户自由封装组件是React非常突出的特性,用户可将自己创建的组件像普通的HTML标签一样插入页面,React.CreateClass方法就是用来创建一个组件类的。在创建和调用react组件时有几点需要注意,我们在实际的demo中进行总结。
    从一个简单的例子开始,我们尝试创建一个包含文本框和提交按钮的组件:

        <div id="container"></div>
        <script type="text/babel">
          let InputWithButton = React.createClass({
            render:function(){
              return(
                <div>
                  <input type="text" value="password"/> 
                  <button>Submit</button>               
                </div>
              ) 
            }
          });
          ReactDOM.render(
            <InputWithButton/>,
            document.getElementById("container")
          )
        </script>
    

    运行上述代码,显示结果如下:

    在上述代码中,需要注意以下几点:

    1. 我们创建了一个名为InputWithButton的组件类,注意此处命名首字母必须大写,自动生成InputWithButton实例。
    2. 所有的组件都必须要有自己的render方法,用以输出组件
    3. 在创建组件类时,return的最终结果内只能包含一个顶级标签,如果我们在上例中去掉div标签直接返回<input><button>,代码会报错。
    4. 组件的用法与原生HTML的用法一致,直接在ReactDOM.render中插入<InputWithButton/>,注意"/"不能丢,在jsx解析时会根据"/"判断标签的闭合。
      另外,像原生的HTML标签一样,可以给组件添加属性,参考如下代码:
        <div id="container"></div>
        <script type="text/babel">
          let InputWithButton = React.createClass({
            render:function(){
              return(
                <div>
                  <input type="text" value={this.props.value} className="input"/>
                  <button>{this.props.name}</button>
                </div>
              ) 
            }
          });
          ReactDOM.render(
            <InputWithButton name="confirm" value="password"/>,
            document.getElementById("container")
          )
        </script>
    

    1. 如上例中调用<InputWithButton/>标签时,添加的name和value属性,在创建组件类时,可以通过this.props对象是获取组件的属性,在input通过this.props.value给value赋值,在button中通过this.props.name赋值,注意都要包裹在{}内。
    2. 添加属性时需要注意添加class属性时要用className,for属性用htmlFor,这是因为class和for是JavaScript的保留字。
      在使用this.props对象获取属性时,需要注意比较特殊的this.props.children,他表示组件的所有子节点。
        <div id="container"></div>
        <script type="text/babel">
          let FormList = React.createClass({
            render:function(){
              return(
                <form>
                  {
                    React.Children.map(this.props.children,function(child){
                      return <button>{child}</button>;
                    })
                  }
                </form>
              ) 
            }
          });
    
          ReactDOM.render(
            <FormList>
                <span>Submit</span>
                <span>Clear</span>
                <span>Cancel</span>  
            </FormList>,
            document.getElementById("container")
          )
        </script>
    

    如上代码,我们尝试创建一个包含三个按钮的form表单,在创建FormList组件类时,通过this.props.children获取FormList下的子元素,通过React.Children.map遍历节点。通过React专用的调试工具,我们可以查看FormList组件类的具体组成如下:

    对于React的入门还是比较容易的,但想深入掌握还有些路要走,要尽快熟悉JSX的语法规则,主要参考阮一峰大神的react入门实例教程官方文档

  • 相关阅读:
    Artificial Intelligence: A Modern Approach Notes
    Android Studio: Error running 'app': no target device found. Mac
    证明 当 a=qb+r, gcd(a,b)=gcd(b,r),a,b,q,r 属于整数
    dmg 文件打不开,双击没反应
    vim tab size,8 空格改4空格
    zsh: command not found: sage
    PyCharm ImportError: No module named 'numpy' 但用 pip3 install numpy 又显示 已经下载
    GitHub Desktop Merge
    Android Studio Unable to access Android SDK addon list Mac
    conda 切换 python 环境 vscode
  • 原文地址:https://www.cnblogs.com/Nancy-wang/p/6995211.html
Copyright © 2020-2023  润新知