React学习笔记(一) 基础知识
现在最热门的前端框架有AngularJS、React、Bootstrap等。自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我。
React的基础很简单,极易上手。
React全都是围绕着组件的, 所以React基础也就是:写组件的jsx、组件的生命周期以及组件的属性和状态。
- jsx,只要是用过html模板的分分钟就能写了;
- 生命周期就是组件在创建、销毁、更新阶段的那几个回调函数,让你有机会再这几个关键点上对组件和环境做点手脚;
- 属性就像html标签里的属性一样决定了这个组件是什么样的;
- 状态,像是属性很像也和属性很不同,它是可变的, 是控制组件的唯一入口,这个以后可得细说。
- redux,其实就是在鼓捣状态。
React一个标新立异的地方:jsx(js扩展)
JSX 的基本语法规则:遇到 HTML 标签(以 < 开头),就用 HTML 规则解析;遇到代码块(以 { 开头),就用 JavaScript 规则解析。
在text/jsx中的代码最初不会被浏览器理会,他会被react的JSXTransformer编译为常规的JS,然后浏览器才能解析。
<script src="react/build/react.js"></script> <script src="react/build/JSXTransformer.js"></script>
或者
<script src="react/build/react.js"></script> <script src="babel/browser.js"></script>
前者对应的type="text/jsx",后面对应的type="text/babel"
推荐使用text/babel,因为它支持ES6语法
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>React学习</title>
<script src="./js/react.js"></script>
<script src="./js/react-dom.js"></script>
<script src="./js/browser.min.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/babel">
ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementById('example')
);
</script>
</body>
</html>
react.js 是 React 的核心库
react-dom.js 是提供与 DOM 相关的功能
Browser.js 的作用是将 JSX 语法转为 JavaScript 语法
ReactDOM.render()
ReactDOM.render 是 React 的最基本方法,用于将模板转为 HTML 语言,并插入指定的 DOM 节点。
React.createClass()
React.createClass 方法就用于生成一个组件类
var Myfirst = React.createClass({
render : function(){
return <div>我的第一个组件</div>;
}
})
ReactDOM.render(
<Myfirst />,
document.getElementById('example')
);
ReactJS有一些奇怪的地方:
1 : 组件首字母必须大写
2 : render 是表达的意思,它的匿名函数必须有一个return
组件的属性可以在组件类的 this.props 对象上获取,比如 name 属性就可以通过 this.props.name 读取
var HelloMessage = React.createClass({
render: function() {
return <h1>Hello {this.props.name}</h1>;
}
});
ReactDOM.render(
<HelloMessage name="John" />,
document.getElementById('example')
);
组件嵌套(component):组件的高复合应用
一个页面我们可以认为是一个组件集合,它是由多个组件嵌套而成
<script type="text/babel">
var Myfirst = React.createClass({
render : function(){
return (
<div>我的第一个组件</div>
<MySecond />
);
}
})
var MySecond = React.createClass({
render : function(){
return (
<h3>我的第二个组件</h3>
<MyThird />
);
}
})
var MyThird = React.createClass({
render : function(){
return (<h6>我的第六个组件</h6>)
}
})
ReactDOM.render(
<Myfirst />,
document.getElementById('example')
);
</script>
上面的代码会报错:Uncaught SyntaxError: embedded: Adjacent JSX elements must be wrapped in an enclosing tag
提示我们,嵌套的组件(component),必须要用一个标签包含,修改如下:
<script type="text/babel">
var Myfirst = React.createClass({
render : function(){
return (
<div> {/* 添加的包含标签 */}
<div>我的第一个组件</div>
<MySecond />
</div>
);
}
})
var MySecond = React.createClass({
render : function(){
return (
<div> {/* 添加的包含标签 */}
<h3>我的第二个组件</h3>
<MyThird />
</div>
);
}
})
var MyThird = React.createClass({
render : function(){
return (<h6>我的第六个组件</h6>)
}
})
ReactDOM.render(
<Myfirst />,
document.getElementById('example')
);
</script>
React学习笔记(一) 基础知识的更多相关文章
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)
一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...
- C#学习笔记(基础知识回顾)之值传递和引用传递
一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...
- C#学习笔记(基础知识回顾)之值类型和引用类型
一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...
- Quartz学习笔记:基础知识
Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...
- react学习笔记1--基础知识
什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...
- .net学习笔记---xml基础知识
一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...
- Docker的学习笔记(一)基础知识
概述 本人最近在学习docker相关的知识,既是工作本身的需要也是自己对技术的追求的必要,以后我也会推出容器相关的随笔,既可以增长自己的知识,也可以和读者广泛交流,岂不乐乎?话不多说.第一篇先介绍do ...
- Scala学习笔记--正则表达式基础知识、如何在scala内使用
正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www. ...
随机推荐
- Poj 2528-Mayor's posters 线段切割
题目:http://poj.org/problem?id=2528 Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total ...
- [TypeScript] Understanding Decorators
Decorators are a feature of TypeScript that are becoming more and more common in many major librarie ...
- JAVA IO之管道流总结大全(转)
要在文本框中显示控制台输出,我们必须用某种方法“截取”控制台流.换句话说,我们要有一种高效地读取写入到System.out和 System.err 所有内容的方法.如果你熟悉Java的管道流Piped ...
- android 71 ArrayAdapter和SimpleAdapter
Activity和item: Activity:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an ...
- UNIX环境高级编程---标准I/O库
前言:我想大家学习C语言接触过的第一个函数应该是printf,但是我们真正理解它了吗?最近看Linux以及网络编程这块,我觉得I/O这块很难理解.以前从来没认识到Unix I/O和C标准库I/O函数压 ...
- MAC上更新Ruby失败解决办法
尝试用RVM升级Ruby http://blog.csdn.net/lissdy/article/details/9191351 如果碰到下面问题 Searching for binary rubie ...
- 一句代码,更加优雅的调用KVO和通知
来源:wazrx 链接:http://www.jianshu.com/p/70b2503d5fd1 写在前面 每次使用KVO和通知我就觉得是一件麻烦的事情,即便谈不上麻烦,也可说是不方便吧,对于KVO ...
- android UI生成器
可根据选择的效果生成资源 http://jgilfelt.github.io/android-actionbarstylegenerator/#name=example&compat=sher ...
- VC/MFC 下 递归遍历目录下的所有子目录及文件
在MFC下要实现文件夹的递归遍历,可用CFileFind类,依次读取文件夹下的子文件夹和文件,并判断通过判断是文件夹还是文件来决定递归遍历.递归遍历代码如下: /******************* ...
- python 内置函数和表达式
对于简单的函数来说,可以使用类似于三元运算来表示,即: lambda表达式 格式: lambda [arg1[, arg2, ... argN]]: expression 先来看看三元表达式 #普 ...