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
原文地址:https://www.cnblogs.com/BlueStarWei/p/6646807.html