React组件(推荐)

课程地址:https://www.imooc.com/learn/944

认识React

JSX—一种语法结构

一、环境安装:

1.HTTP服务器

安装python3.5.2

建立项目文件夹react_py

打开teminal(windows上我安装的cmder)

进入该目录下

启动服务器命令

python -m http.server

2.相关准备

安置需要的框架文件

react官方链接:https://reactjs.org/

react官方教程:https://reactjs.org/tutorial/tutorial.html

在右上方git中下载最新版本的master(速度挺慢的),看例子

cdn链接:

 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react-dom.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script>

复制上面的链接,浏览器打开,分别复制内容到新建的js文件中

附加(sublime3)下载:https://www.sublimetext.com/3

index.html为新建文件

开启浏览器:http://localhost:8000/component/index.html

说明可以跑起来了

二、组件化

1.组件化思想

引入框架到文件中

ctrl+F5刷新(F12-开发者模式,查看console控制台发现红色文字报错,警告:说明不太正规)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>hello react</title>
	<script src='react.js'></script>
	<script src='react-dom.js'></script>
	<script src='browser.min.js'></script>
</head>
<body>
	<script type='text/babel'>
		ReactDOM.render(
			<h1>I am Tyler</h1>,
			document.body
		)
	</script>
</body>
</html>

挂载节点父元素-body元素,一般不要挂载在body上

2.react组件化

利用函数思想渲染页面,复杂组件由简单组件组成

做一个hello world组件:

jsx对象

增加jsx文件,通过react解析,然后dom挂载

渲染

通过react提供的creatClass组件创建,上面函数中render作用是在渲染的时候会调用下面render函数,得到jsx对象,改变dom模型,进而改变界面

Helloworld就是一个组件

使用的时候就在ReactDOM.render里面加载

显示出来

组件的优越处:可重用性

增加组件的父节点和其他兄弟节点

组件输入参数:

this指代整个HelloWorld组件对象,props是组件的数据对象,greetTarget是参数名

输入不同参数

3.组件样式设计

pros.children

添加组件,涉及根节点

在react下class是关键字,应该使用className

react下设计逻辑和页面逻辑的整合:

把界面设计逻辑封装成一个json对象,把这个对象放在react空间的代码块里面

把界面显示属性封装在letterStyle里,删除style

把对象放到render函数里,css语法整合在js里

设置不同颜色,组件显示的可配置化

设计复合式控件(类似调色板):

基本框架代码

Square为上方颜色空间,Label为下方文字空间

Card为两个空间的结合,把其绘制到根节点下

Card空间装饰

4.组件实现

color变量属性

字空间的color先通过父属性传递

修改可变,空间可重用

5.组件属性的传递

react不能直接从1到5,属性也不能反向传递(子到父)

使用基本框架代码

外层组件

在外层属性

最外层设置属性值

属性传递不灵活

使用ES6 中{...}语法,属性的扩展操作符

6.组件状态机制

灵活? 组件是程序的基本单位。需要存储机制-组件的状态机制

在基本框架里新建对象

增加显示样式

增加背景颜色

基本逻辑完成

了解几个js原生接口:

getInitialState——组件加载之前会被调用-初始化组件

componentDidMount——组件被浏览器加载之后,但是render函数还没有被调用之前

这里是调用定时器的最佳时期

setState——用来修改组件本身的state对象

timerTrick是个回调函数

计数开始变化

调用机制:

getInitialState初始化加载   —>   componentDidMount被调用   —>   定时器开启  —>  触发上图render函数  —>  如果render里面引用了他的子组件,子组件的render也会被自动调用,会引发render函数的调用浪潮,整个界面的信息会自动发生改变 —> 使得底层数据和界面保持一致

增加界面修饰内容:

数据显示

增加属性对象

三、组件的生命周期

几个重要的生命周期函数

对应this.props

对应this.state

挂在到#container下

说明组件被框架加载到页面了

页面绘制

生命周期顺序1-组件生成

getDefaultProps —> getInitialState —>  componentWillMount —> render —> componentDidmount

增加页面样式

创建子组件Counter,增加display显示属性

传递值0

变量初始化为0

增加increase函数

添加函数

shouldComponentUpdate生命周期函数

参数newPros对应的是getDefaultProps函数的rentrun对象

newStae对应的是更新好的count对象

如果返回值是true的话会继续调用,如果不是就会停止调用后续的生命周期函数

shouldComponentUpdate是个很重要的周期函数,它的逻辑关系到整个生命周期

componentWillUpdate,componentDidUpdate生命周期函数

生命周期顺序2-组件调用

getDefaultProps —> getInitialState —>  componentWillMount —> componentDidmount—> render —> shouldComponentUpdate (true)  —>  componentWillUpdate (false) —>  render —> componentDidUpdate 

一个正常的生命周期流程

getDefaultProps —> getInitialState —>  componentWillMount —> componentDidmount—> render —> shouldComponentUpdate (false)

5时停止调用后续

getDefaultProps —> getInitialState —>  componentWillMount —> componentDidmount—> render —> shouldComponentUpdate (true)  —>  componentWillUpdate (true) —>  shouldComponentUpdate (true)  —>  componentWillUpdate ...

1-4时反复调用

探索更新周期

componentWillUnmount生命周期:用于结束某些组件

在shouldComponentUpdate中添加拿掉节点的react语句

生命周期顺序3-组件消亡:

getDefaultProps —> getInitialState —>  componentWillMount —> componentDidmount —> render —> shouldComponentUpdate (true) —> componentWillUpdate (false) —> render —> componentDidUpdate —>  shouldComponentUpdate (false) —>  componentWillUnmount(定时器组件被拿掉前,做收尾处理)

comentWillReceiveProps生命周期

shouldComponentUpdate生命周期

componentWillUpdate生命周期

接下来调用render

componentDidUpdate生命周期

在组件上设置断点

点击+

继续断点,之后调用render,把相应的值绘制

生命周期顺序总结:

getDefaultProps-getInitialState-componentWillMount-componentDidMount-shouldcomponentUpadate-componentWillReceiveProps-shouldcomponentUpadate-componentWillUpdate-render-componentDidUpate

相关学习网站:

1.推荐 10 个 ReactJS 入门资源: https://www.oschina.net/translate/10-resources-to-get-you-started-with-reactjs

猜你喜欢

转载自my.oschina.net/u/3018050/blog/1794807