• ReactJS入门:展示数据


      由于公司开发需要,博主利用闲暇的时间对ReactJS的基础知识进行了一些粗浅的认识和了解。博主对ReactJS的学习主要来自官网(http://reactjs.cn/react/docs/thinking-in-react.html)。下面分享一下笔者在学习过程中的一些总结。

         本节主要介绍React的模板,属性传递及拓展。

    1.React 的模板,读者可以在“// To add your code here.”处添加自己的测试代码进行研究。在浏览器中打开http// localhost:8080/index.html 查看效果。

    <!-- index.html -->
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8" />
        <title>React Tutorial</title>
    //导入相关JS文件 <script src="https://npmcdn.com/react@15.3.1/dist/react.js"></script> <script src="https://npmcdn.com/react-dom@15.3.1/dist/react-dom.js"></script> <script src="https://npmcdn.com/babel-core@5.8.38/browser.min.js"></script> </head> <body>
    <div id="content"></div> <script type="text/babel"> // To add your code here. </script> </body> </html>

      其中,<div id="content"></div>是自定义HTML标签、组件插入显示的位置;

         <script type="text/babel">的 type 属性为 text/babel 。这是因为 React 独有的 JSX 语法,跟 JavaScript 不兼容。凡是使用 JSX 的地方,都要加上 type="text/babel" 。

              导入的JS文件:react.js是React的核心库,

                                  react-dom.js提供与DOM相关的功能,

                                  brower.min.js将JSX语法转换为JavaScript语法。

    2.React 通过ReactDOM.render()渲染HTML标签和React组件,React通过大小写区分本地的组件类和HTML标签

     2.1 React 渲染HTML标签,变量名的首字母必须小写

    var myDivElement = <div className="foo" >Hello React</div>;
    ReactDOM.render(myDivElement, document.getElementById('content'));

    注意:由于JSX是JavaScript,因此不要将类别和类型的标识符作为XML属性名称。 相反,React DOM组件分别期望DOM属性名称,如className 和htmlFor。   

          该代码的简单写法为:

    ReactDOM.render(
        <div className="foo" >Hello React</div>,
    document.getElementById('content') );


    2.2 React 渲染React组件,变量名的首字母必须大写

    var MyComponent = React.createClass({/*...*/});
    ReactDOM.render(
      <MyComponent />, document.getElementById('content')
    );

      React.createClass 方法就用于生成一个组件类。例子如下:

    var HelloWorld = React.createClass({
      render: function() {
        return (//此处只允许返回一个顶层标签
          <p>Hello, <input type="text" placeholder="Your name here" />!</p>
        );
      }
    });
    ReactDom.render(
      <HelloWorld />,
    document.getElementById('content')
    );

    3.使用this.props获取组件属性/子类

        注意:this.props.属性名  --> 返回 属性值; this.props.children --> 返回子类元素。

    var Comment = React.createClass({
      render: function() {
        return (
          <div className="comment">
            <h2 className="commentAuthor">
              author:{this.props.author}
            </h2>
            children:{this.props.children}
          </div>
        );
      }
    });  
       
    ReactDOM.render(
      <Comment author="wei.hu" >hello</Comment>,
      document.getElementById('content')
    ); 

    4.处理数据集合

    注意: 在数组或者迭代器中的每一个子类对象必须有唯一的一个key.

    4.1.一般数组集合

    var names =['Tom','Thomas','Alley']; 
    ReactDOM.render(
      <div> 
        {
          names.map(function (name) {
             return <div key={name.toString()}>Hello, {name}!</div>
          })
        }
      </div>,
      document.getElementById('content')
    );

    2.Json集合

    var data = [
      {id: 1, author: "Pete Hunt", text: "This is one comment"},
      {id: 2, author: "Jordan Walke", text: "This is *another* comment"}
    ];
    var CommentBox = React.createClass({
      render: function() {
    var commentNodes = this.props.data.map(function(comment) {
    return (
    <div key={comment.id}>
    author={comment.author},
    text={comment.text}
    </div>
    );
    });
    return (
    <div className="commentBox">{commentNodes}</div>
    );
    }
    });
    ReactDOM.render(
    <CommentBox data={data} />,
    document.getElementById('content')
    );

    5.属性拓展

       有时候,我们会遇到这样的情况。当我们创建组件时,无法确定设置哪些属性。而在后期使用时需要将某些属性添加到对象中。而有时候,我们需要修改对象的某些属性的值。具体实现如下:

    5.1将属性添加到对象中

    //前期:创建组件
    var
    Component = React.createClass({ render : function(){ return (<div>Spread Attribute</div>); } });
    //后期:将属性添加到对象中
    var props = {}; props.foo = 'x'; props.bar = 'y'; //将传入对象的属性复制到组件的props上 var component = <Component {...props} />;//将属性复制到组件中 console.log(component.props);//控制台输出:Object {foo: "x", bar: "y"}

     

    5.2 修改对象中某些属性的值

    //前期:创建属性
    var
    Component = React.createClass({ render : function(){ return (<div>Spread Attribute</div>); } });
    var props = { foo: 'default' ,bar: 'bar'};//属性原有的值
    //后期:修改部分属性的值
    var component = <Component {...props} foo={'override'} />; console.log(component.props);//Object {foo: "override", bar: "bar"}

    5.3 转移属性的快捷方式:将CheckLink组件的属性复制到底层的HTML元素(<a>)

    var CheckLink = React.createClass({
      render: function() {
        // This takes any props passed to CheckLink and copies them to <a>
        return <a {...this.props}>{this.props.children}</a>;
      }
    });
    
    ReactDOM.render(
      <CheckLink href="/checked.html">
        Click here!
      </CheckLink>,
      document.getElementById('content')
    );

    6.以JSON的形式输出this.props中的数据

    var Component = React.createClass({
        render : function(){
                  return (<div>{JSON.stringify(this.props)}</div>);
            }
    });
    var component = <Component foo='x' bar='y' />;
    ReactDOM.render(
        component,document.getElementById('content')
    );

        未完,待续。

        更多内容,请访问:http://www.cnblogs.com/BlueStarWei/       

    更多内容,请访问:http://www.cnblogs.com/BlueStarWei
  • 相关阅读:
    php实现求链表中倒数第k个节点
    在python正在使用mysql
    1002. 写这个号码 (20)(数学啊 ZJU_PAT)
    Lua 环境结构 --Linux
    Java程序猿JavaScript学习笔记(4——关闭/getter/setter)
    C/C++数据对齐汇总
    多线程
    11gRAC CHM 管理
    hdu 4059 The Boss on Mars(纳入和排除)
    模板方法模式分析、图表和基本代码
  • 原文地址:https://www.cnblogs.com/BlueStarWei/p/6646807.html
Copyright © 2020-2023  润新知