ReactJS简介

React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站。做出来以后,发现这套东西很好用,就在2013年5月开源了。由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单。所以,越来越多的人开始关注和使用,认为它可能是将来 Web 开发的主流工具。更多关于react的中文介绍请参这篇文章.

学习react需要具备的一些知识栈:

你需要了解JavaScriptHTML5 及 CSS.仅管 ReactJS 并不使用 HTML, 但是它使用的JSX语法 与 HTML非常相似,如果有这些知识的基础,会对后面的学习非常有帮助。在接下来的例子中,我将会用到一些EcmaScript 2015 的语法,所以提前进补一下这方面的知识也是很有益处的。

学习react需要准备的开发环境:

虽然我推荐使用mac系统作为react开发环境,但是windows系统也可以满足当前的学习条件。本教程需要nodejs的支持,请自行安装。教程相关代码请从我的github.com上拉取相关代码到本地。然后在终端(命令行)中输入npm install && npm start

下面开始react的学习之旅。

1. 了解jsx的用法,首先新建一个App.jsx的文件。下面的例子中,我们返回一个div容器,需要注意的是,仅管我们返回的内容很像是一段html代码,但它不是真的htm,记住这一点很重要。

import React from 'react';

class App extends React.Component {
render() {
return (
<div>
Hello World!!!
</div>
);
}
} export default App;

打开浏览器访问localhost:8080/index.html  如果之前的准备工作没有问题的话,此时,你应当可以看到页面上显示出了Hello World !!! 这没有什么特别的,不是吗?如果我们要返回多个dom元素,需要有一个元素来包围里边的元素。下面我们用一个div来包围h1,h2,和p元素来演示一下。

import React from 'react';

class App extends React.Component {
render() {
return (
<div>
<h1>Header</h1>
<h2>Content</h2>
<p>This is the content!!!</p>
</div>
);
}
} export default App;

保存这后,浏览器自动刷新了页面。这神奇的效果,得益于我们的自动化构建方式,如果你对这一块的实现有兴趣,请自行查补webpack、webpack-dev-server相关内容。

我们可以用html类似的方式给元素添加自定义的属性,你需要加上一个data-前缀。下面我要演示一下如何给元素添加自定义属性。

import React from 'react';

class App extends React.Component {
render() {
return (
<div>
<h1>Header</h1>
<h2>Content</h2>
<p data-myattribute = "somevalue">This is the content!!!</p>
</div>
);
}
} export default App;

如果要添加变量或者表达式,需要使用大括号{}。示例如下:

import React from 'react';

class App extends React.Component {
render() {
return (
<div>
<h1>{1+1}</h1>
</div>
);
}
} export default App;

 需要注意的是,不可以在表达式中使用if else , 但是可以使用三目运算符 ? :

import React from 'react';

class App extends React.Component {
render() { var i = 1; return (
<div>
<h1>{i == 1 ? 'True!' : 'False'}</h1>
</div>
);
}
} export default App;

下面演示在jsx语法中,如何给元素添加行内样式,这和jquery中css()的用法非常类似。

import React from 'react';

class App extends React.Component {
render() { var myStyle = {
fontSize: 100,
color: '#FF0000'
} return (
<div>
<h1 style = {myStyle}>Header</h1>
</div>
);
}
} export default App;

如何使用注释,使用{} //单行注释, /**/  多行注释

import React from 'react';

class App extends React.Component {
render() {
return (
<div>
<h1>Header</h1>
{//End of the line Comment...}
{/*Multi line comment...*/}
</div>
);
}
} export default App;

到这里,关于jsx的用法就差不多可以结束了,下一节演示组件的用法。

本章文件链接http://www.tutorialspoint.com/reactjs/reactjs_jsx.htm 可能需要FQ

2 组件的用法

import React from 'react';

class App extends React.Component {
render() {
return (
<div>
<Header/>
<Content/>
</div>
);
}
} class Header extends React.Component {
render() {
return (
<div>
<h1>Header</h1>
</div>
);
}
} class Content extends React.Component {
render() {
return (
<div>
<h2>Content</h2>
<p>The content text!!!</p>
</div>
);
}
} export default App;

新建一个main.js文件,内容如下

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx'; ReactDOM.render(<App />, document.getElementById('app'));

3 通过状态机实现组件之间变量的传递,this.state  这是react中一个非常重要的对象,与之非常类似的一个对角是this.props, 它们经常会用到,我有必要简单说一下它们的区别。state,常用于组件内部状态的变化,而props,常用于向子组件传递变量。

import React from 'react';

class App extends React.Component {
constructor() {
super(); this.state = {
data:
[
{
"id":1,
"name":"Foo",
"age":"20"
}, {
"id":2,
"name":"Bar",
"age":"30"
}, {
"id":3,
"name":"Baz",
"age":"40"
}
]
}
} render() {
return (
<div>
<Header/>
<table>
<tbody>
{this.state.data.map((person, i) ⇒ <TableRow key = {i} data = {person} />)}
</tbody>
</table>
</div>
);
}
} class Header extends React.Component {
render() {
return (
<div>
<h1>Header</h1>
</div>
);
}
} class TableRow extends React.Component {
render() {
return (
<tr>
<td>{this.props.data.id}</td>
<td>{this.props.data.name}</td>
<td>{this.props.data.age}</td>
</tr>
);
}
} export default App;

在循环组件内容时,使用key = {i} 是一个常用的优化技巧。 

props 初次露面,下面的例子没有什么代表性,更像是state的用法。

import React from 'react';

class App extends React.Component {
constructor(props) {
super(props); this.state = {
header: "Header from state...",
"content": "Content from state..."
}
} render() {
return (
<div>
<h1>{this.state.header}</h1>
<h2>{this.state.content}</h2>
</div>
);
}
} export default App;

 下面展示props的真正用法,更新一下main.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx'; ReactDOM.render(<App headerProp = "Header from props..." contentProp = "Content
from props..."/>, document.getElementById('app')); export default App;

更新一下App.jsx

import React from 'react';

class App extends React.Component {
render() {
return (
<div>
<h1>{this.props.headerProp}</h1>
<h2>{this.props.contentProp}</h2>
</div>
);
}
} export default App;

我们在App组件上添加的headerProp和contentProp这两个属性可以在App组件内通过this.props拿到。

再来一个props和state一起使用的例子,相对有点复杂,需要仔细看代码。

App.jsx的内容更新如下:

import React from 'react';

class App extends React.Component {
constructor(props) {
super(props); this.state = {
header: "Header from props...",
"content": "Content from props..."
}
} render() {
return (
<div>
<Header headerProp = {this.state.header}/>
<Content contentProp = {this.state.content}/>
</div>
);
}
} class Header extends React.Component {
render() {
return (
<div>
<h1>{this.props.headerProp}</h1>
</div>
);
}
} class Content extends React.Component {
render() {
return (
<div>
<h2>{this.props.contentProp}</h2>
</div>
);
}
} export default App;

main.js还原成老样子:

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx'; ReactDOM.render(<App/>, document.getElementById('app'));

原文链接http://www.tutorialspoint.com/reactjs/reactjs_props_overview.htm

(未完待续....)

  

react入门参考资料的更多相关文章

  1. react入门参考资料--step by step

    ReactJS简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出 ...

  2. React入门学习

    为了获得更好的阅读体验,请访问原地址:传送门 一.React 简介 React 是什么 React 是一个起源于 Facebook 的内部项目,因为当时 Facebook 对于市场上所有的 JavaS ...

  3. react入门(3)

    在第一篇文章里我们介绍了jsx.组件.css写法  点击查看react入门(1) 第二篇文章里我们介绍了事件.this.props.children.props....other.map循环  点击查 ...

  4. react入门(1)

    这篇文章也不能算教程咯,就算是自己学习整理的笔记把. 关于react一些相关的简介.优势之类的,随便百度一下一大堆,我就不多说了,可以去官网(http://reactjs.cn/)看一下. 这片主要讲 ...

  5. react入门(2)

    接着上一次的讲,如果没有看过上一篇文章的小伙伴可以先看一下http://www.cnblogs.com/sakurayeah/p/5807821.html React事件 可以先看一下官网讲解的内容h ...

  6. react入门(4)

    首先还是来回顾一下前三篇讲的内容 react入门(1): jsx,组件,css写法 react入门(2):事件,this.props.children,props,...other react入门(3 ...

  7. React 入门实例教程(转载)

    本人转载自: React 入门实例教程

  8. React 入门实例教程

    现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Face ...

  9. React入门 (1)—使用指南(包括ES5和ES6对比)

    前言 本篇会简明扼要的介绍一下React的使用方法.代码会用JSX+ES5和JSX+ES6两种方式实现. React简介 React来自Facebook,于2013年开源.至今不断修改完善,现在已经到 ...

随机推荐

  1. 认识CSS中精灵技术(sprite)和滑动门

    前端之HTML,CSS(十) 精灵技术与精灵图 精灵技术本质 精灵技术是一种处理网页背景图像的方式,实质是将小的背景图片拼接到一张大的背景图像上.拼接成的大图被称为精灵图.浏览器打开网页时,每一个图片 ...

  2. Javascript之in操作符的用法

    in操作符是js里面常用的一个操作符,下面是其几个常用的功能: 1.配合for语句循环遍历/迭代数组中的元素 2.配合for语句循环遍历/迭代集合中的属性 3.判断对象是否是数组的元素 4.判断对象是 ...

  3. CentO7 安装 redis, 主从配置,Sentinel集群故障转移切换

        一.Redis的安装(前提是已经安装了EPEL)   安装redis: yum -y install redis 启动/停止/重启 Redis 启动服务: systemctl start re ...

  4. 深度学习(七)U-Net原理以及keras代码实现医学图像眼球血管分割

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9780786.html DRIVE数据集下载百度云链接:链接:https://pan.baidu ...

  5. 解决SSH连接linux时长时间不操作自动断开

    最近重装Linux系统,但是这次ssh连接云服务区Linux系统时,经常出现一段时间不操作,连接自动中断,表现为光标还在闪动,但是却无法操作.只好关闭终端,重新连接,很是麻烦. 为此,通过网络查找,找 ...

  6. Redis之数据类型Sting字符串

    Redis String(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value. string类型是二进制安全的.意思是redi ...

  7. [中英对照]Introduction to Remote Direct Memory Access (RDMA) | RDMA概述

    前言: 什么是RDMA? 简单来说,RDMA就是指不通过操作系统(OS)内核以及TCP/IP协议栈在网络上传输数据,因此延迟(latency)非常低,CPU消耗非常少. 下面给出一篇简单介绍RDMA的 ...

  8. imx6 Android6.0.1 init.rc解析

    1. 概述 1.1 概述 之前分析过android5的init.rc,不过还是不够仔细,现在来看看android6的,多的就不写了,只写关键点 忘记一些基本概念可以先看看之前的笔记: Android5 ...

  9. IOS Core Image之一

    项目中要实现高斯模糊的效果,今天看了下Core Image这块的内容, 主要包括CIImage.CIFilter.CIContext.CIDetector(检测).CIFeature(特征)等类. 今 ...

  10. RocketMQ的一些特性

    一 nameserver 相对来说,nameserver的稳定性非常高.原因有二: 1 nameserver互相独立,彼此没有通信关系,单台nameserver挂掉,不影响其他nameserver,即 ...