由于公司开发需要,博主利用闲暇的时间对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/

ReactJS入门:展示数据的更多相关文章

  1. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  2. ReactJS入门二

    ReactJS入门学习二 ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事 ...

  3. ReactJS入门学习一

    ReactJS入门学习一 阅读目录 React是什么? React如何制作组件? 理解组件属性props 理解页面中如何渲染数据的 理解从服务器端获取数据及理解state的 回到顶部 React是什么 ...

  4. 一看就懂的ReactJs入门教程(精华版)

    一看就懂的ReactJs入门教程(精华版) 现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和 ...

  5. ReactJs入门思路

    ReactJs入门思路小指南 原文  http://segmentfault.com/blog/fakefish/1190000002449277 React是怎么搞的? React中,把一切东西都看 ...

  6. ReactJs入门教程-精华版

    原文地址:https://www.cnblogs.com/Leo_wl/p/4489197.html阅读目录 ReactJs入门教程-精华版 回到目录 ReactJs入门教程-精华版 现在最热门的前端 ...

  7. 入门大数据---Spark整体复习

    一. Spark简介 1.1 前言 Apache Spark是一个基于内存的计算框架,它是Scala语言开发的,而且提供了一站式解决方案,提供了包括内存计算(Spark Core),流式计算(Spar ...

  8. 使用UITableView展示数据

    TableView主要用于展示数据,类似于Android中的ListView. 我们可以通过两个方式使用TableView.第一种是直接使用TableView类.第二种是通过UITableViewCo ...

  9. PHP+Mysql+jQuery实现地图区域数据统计-展示数据

    我们要在地图上有限的区块内展示更多的信息,更好的办法是通过地图交互来实现.本文将给大家讲解通过鼠标滑动到地图指定省份区域,在弹出的提示框中显示对应省份的数据信息.适用于数据统计和地图区块展示等场景. ...

  10. ReactJS入门指南

    ReactJS入门指南 本文旨在介绍ReactJS的基本知识,并一步步详细介绍React的基本概念和使用方法等,以及相应的Demo.本文在很大程度上参考了React官方文档和官方指南.如果你英语还不错 ...

随机推荐

  1. 学习笔记——Java数字处理类

    1.数字格式化 使用Java.text.DecimalFormat格式化数字,一般使用其中的DecimalFormat类.如: import java.text.DecimalFormat; publ ...

  2. 最常用的UML工具介绍

    最常用的UML工具介绍 1.Rational Rose.大名鼎鼎,史上最有名.最无可替代的UML产品,以至于,大多数将之等同于UML工具,正如将可乐等同于可口可乐.需要指出的是,自从 Rational ...

  3. 一种基于路网图层的GPS轨迹优化方案

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 GPS数据正常情况下有20M左右的偏移,在遇到高楼和桥梁等情况 ...

  4. 每天一个linux命令31)--chown命令

    chown将 指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID,组可以使组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷 ...

  5. PDO预处理语句规避SQL注入攻击

    所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存 ...

  6. 用Less定义常用的CSS3效果函数及常用颜色搭配(让CSS写起来更有趣)

    定义圆角及调用 /* 定义圆角 @radius 圆角大小 */ .round(@radius:5px){ border-radius:@radius; -webkit-border-radius: @ ...

  7. C#一定比C++性能差?当然不!破除迷信,从我做起!

    几乎所有的程序员在初学编程之时,都被灌输过"托管语言(Java.C#)性能比非托管语言(C.C++)差好多" 的迷信教条.如果你问他们为什么,他们一定会说:托管语言需要通过虚拟机或 ...

  8. Redis安装以及基本数据类型

    安装 1.阿里云CentOS 1.进入到centos系统,输入wget http://download.redis.io/releases/redis-3.2.8.tar.gz ,下载好目前最新版的R ...

  9. Ubuntu下安装Redis并实现远程访问

    之前的一篇随笔写到Redis在Windows下的安装,但目前好多大数据处理的服务是在Linux上的,所以想以Redis为例并实现在Windows上利用C#代码远程访问. 以在Ubuntu下为例,步骤如 ...

  10. UITableView 编辑模式(增加-删除-移动---自定义左滑 title)

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...