React组件(推荐,差代码)

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

认识React

200154_xmKe_3018050.png

200216_oGbz_3018050.png

200405_vgnJ_3018050.png

200416_JyoC_3018050.png

200427_4ZDF_3018050.png

200500_byk1_3018050.png

200559_oK0Z_3018050.png

200625_iv41_3018050.png

JSX—一种语法结构

200719_mi9L_3018050.png

200756_edlM_3018050.png

一、环境安装:

1.HTTP服务器

200900_9pXf_3018050.png

安装python3.5.2

建立项目文件夹react_py

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

进入该目录下

201301_b9nZ_3018050.png

启动服务器命令

python -m http.server

201344_cIZQ_3018050.png

2.相关准备

安置需要的框架文件

201433_XFpN_3018050.png

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文件中

204918_T1eo_3018050.png

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

205446_9RoF_3018050.png

index.html为新建文件

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

205942_xguF_3018050.png

说明可以跑起来了

 

二、组件化

1.组件化思想

引入框架到文件中

210400_J2gj_3018050.png

210528_Y1Gz_3018050.png

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上

125758_sJHa_3018050.png

125850_MqYf_3018050.png

125732_dk0n_3018050.png

2.react组件化

125910_cHjH_3018050.png

125944_HuqB_3018050.png

130153_dTRo_3018050.png

130204_pbrA_3018050.png

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

做一个hello world组件:

130428_shoz_3018050.png

130614_lu6y_3018050.png

jsx对象

130633_E9K2_3018050.png

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

130627_HYr8_3018050.png

渲染

130915_aZMr_3018050.png

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

130947_LItm_3018050.png

Helloworld就是一个组件

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

131119_iAQ9_3018050.png

显示出来

组件的优越处:可重用性

131226_RMO4_3018050.png

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

131246_aK0H_3018050.png

组件输入参数:

131342_iHrP_3018050.png

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

131459_ov44_3018050.png

输入不同参数

131538_Ouet_3018050.png

3.组件样式设计

065049_mgZg_3018050.png

pros.children

065229_MCsa_3018050.png

065315_fZNm_3018050.png

添加组件,涉及根节点

065348_UrnP_3018050.png

065615_dTq1_3018050.png

065620_7bCY_3018050.png

065707_Pdlm_3018050.png

065719_nU9K_3018050.png

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

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

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

070447_6Ycy_3018050.png

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

070720_wz8e_3018050.png

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

070811_AIQw_3018050.png

070902_oQE8_3018050.png

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

070940_h7r0_3018050.png

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

071035_expj_3018050.png

071127_z5dr_3018050.png

基本框架代码

071256_U9dA_3018050.png

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

071426_wDGi_3018050.png

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

071522_Hxzb_3018050.png

071800_dW8a_3018050.png

Card空间装饰

071812_DbWI_3018050.png

071859_mlAg_3018050.png

071908_yes1_3018050.png

072001_0qEI_3018050.png

072008_5g68_3018050.png

4.组件实现

072317_UwoP_3018050.png

072351_EeT3_3018050.png

color变量属性

072644_I5oZ_3018050.png

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

072751_kjGO_3018050.png

072757_VfHk_3018050.png

修改可变,空间可重用

5.组件属性的传递

072921_6lVD_3018050.png

073008_s1yf_3018050.png

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

073335_ROtj_3018050.png

使用基本框架代码

073442_xFLl_3018050.png

073530_cJ9j_3018050.png

外层组件

073602_gqUx_3018050.png

在外层属性

073640_CyVL_3018050.png

最外层设置属性值

073741_lw3V_3018050.png

属性传递不灵活

074018_WkFz_3018050.png

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

074028_TKO6_3018050.png

6.组件状态机制

074112_V9Ck_3018050.png

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

074440_seXt_3018050.png

074555_hC65_3018050.png

在基本框架里新建对象

074653_DhOa_3018050.png

074633_TQBL_3018050.png

增加显示样式

074741_96lq_3018050.png

074756_bCpE_3018050.png

增加背景颜色

074810_nYwV_3018050.png

基本逻辑完成

了解几个js原生接口:

075202_GI3e_3018050.png

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

075305_tTr4_3018050.png

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

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

075441_QXt8_3018050.png

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

075601_luG8_3018050.png

075618_ORDE_3018050.png

075700_F9QC_3018050.png

075813_K1H4_3018050.png

timerTrick是个回调函数

075906_Wk8n_3018050.png

080033_oxuv_3018050.png

计数开始变化

080214_oYGx_3018050.png

调用机制:

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

增加界面修饰内容:

080747_2EDb_3018050.png

080805_a8Wl_3018050.png

数据显示

080844_RqWa_3018050.png

080939_QFRi_3018050.png

080926_F0Zv_3018050.png

增加属性对象

081124_ThLI_3018050.png

 

三、组件的生命周期

081453_wIiL_3018050.png

几个重要的生命周期函数

081604_zD3N_3018050.png

081551_9Fxs_3018050.png

081737_le5n_3018050.png

081849_va5v_3018050.png

对应this.props

081924_pqEO_3018050.png

对应this.state

082013_76iZ_3018050.png

挂在到#container下

082112_Lalc_3018050.png

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

082204_Mj56_3018050.png

页面绘制

082400_t5w8_3018050.png

082425_nMUr_3018050.png

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

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

082852_JWYf_3018050.png

083024_4HLk_3018050.png

增加页面样式

083035_9pZ2_3018050.png

083237_RAlC_3018050.png

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

083320_aavJ_3018050.png

传递值0

083334_kG21_3018050.png

083431_W2Wx_3018050.png

变量初始化为0

083459_XJdl_3018050.png

增加increase函数

083554_mosA_3018050.png

添加函数

083607_REZJ_3018050.png

083729_9cxi_3018050.png

shouldComponentUpdate生命周期函数

083825_ZteF_3018050.png

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

083931_09uT_3018050.png

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

084304_tTao_3018050.png

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

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

084452_PdYh_3018050.png

componentWillUpdate,componentDidUpdate生命周期函数

085356_iJyT_3018050.png

生命周期顺序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时反复调用

探索更新周期

150827_RwbR_3018050.png

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

150853_3QsD_3018050.png

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

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

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

152238_utMw_3018050.png

comentWillReceiveProps生命周期

152433_ZK7v_3018050.png

shouldComponentUpdate生命周期

152522_1SWW_3018050.png

componentWillUpdate生命周期

接下来调用render

152634_bemq_3018050.png

componentDidUpdate生命周期

152731_MWmW_3018050.png

在组件上设置断点

152850_5xBL_3018050.png

点击+

152947_TPnO_3018050.png

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

153021_1jn0_3018050.png

生命周期顺序总结:

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

 

转载于:https://my.oschina.net/u/3018050/blog/1794807

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值