学习react心得及总结
注意学习这个在D盘:小红书第一部分的案例react/new-my-app 小红书第二部分的案例react/make-redux 小红书第三部分的案例react/my-app-higher 并且里面有说且文字 react生命周期及其它注意事件
/*
* react中组件里的render函数可以找到组件的this
* 在render方法里调用函数时函数是可以找到this的,react中组件里的方法函数里不能找到组件的this需要在render中绑定this,具体应该是点击事件里的函数
* react中状态管理放在组件的constructor里管理
* setState()设置state的,就会重新渲染render方法重新渲染
* 插值不能用for和if,可以用map
* 组件中必须继承react中的component,组件的首字母必须是大写的
* 生命周期分三个阶段,一个挂载阶段,一个是更新阶段,一个是卸载阶段
* 挂载阶段:constructor()构造函数,在创建组件的时候调用一次
* 挂载:componentWillMount()在组件即将被挂载的时候调用一次
* 一些组件启动的动作,包括像 Ajax 数据的拉取操作、一些定时器的启动等,就可以放在 componentWillMount 里面进行,例如 Ajax:
* 挂载:render()渲染
* 挂载:componentDidMount()在组件被挂载完成的时候调用一次,可以在这里使用refs,例如动画的启动
* 卸载阶段:(组件从页面中移除)
* componentWillUnmount即将卸载没有卸载完成,组件对应的 DOM 元素从页面中删除之前调用
* 更新阶段:(注意:组件一但建成进入更新阶段后不会再走constructor方法里了)
* “更新阶段”。说白了就是 setState 导致 React.js 重新渲染组件并且把组件的变化应用到 DOM 元素上的过程,这是一个组件的变化过程。
* React.js 当中可以直接通过 setState 的方式重新渲染组件,渲染的时候可以把新的 props 传递给子组件,从而达到页面更新的效果。
* componentWillReceiveProps(nextProps)组件从父组件接收到新的 props 之前调用。,父组件的更新会触发子组件的这个函数,nextProps父组件更新的时候带来的数据
* shouldComponentUpdate(nextProps,nextState),你可以通过这个方法控制组件是否重新渲染。如果返回 false 组件就不会重新渲染。是否需要重新渲染,Return false/true
* componentWillUpdate(nextProps,nextState),即将更新,组件开始重新渲染之前调用。
* render渲染
* componentDidUpdate(prevProps,PrevState)完成更新,组件重新渲染并且把更改变更到真实的 DOM 以后调用
* 尽量不要在render里去改状态(setState),尽量在相应的生命周期里去改
*
*
* */
react的redux共分几个部分各个部分的原理如下:
provider : 它做的事情就是与context建立联系,把传进来的store放到context里,并把所有组件当成自己的子组件,这样所有组件都可以经过connect之后都可以取到react-redux里的值( Provider 做的事情也很简单,它就是一个容器组件,会把嵌套的内容原封不动作为自己的子组件渲染出来。它还会把外界传给它的 props.store 放到 context,这样子组件 connect 的时候都可以获取到。)
store: 它就像是一个指挥部,会暴漏出来所有供外使用的方法,里面会写好各方法的处理逻辑,及调用顺序( getState, dispatch, subscribe)
dispatch: 它是处理state数据,也就是你传进来的想要改变的state里的值也就是形参action,它会把你传进来的action交给reducer去处理,reducer处理后调用渲染方法根据最新数据渲染页面(要改哪些数据以及指令类型)
reducer:它是根据action(也是你的指令的类型,它根据你传的类型去判断 它要干啥,要改哪个数据)去判断哪此数据需要更新(把要更新的数据复制出来一份去替换旧的,这样对象地址就不一样了,可以判断旧数据是否更新),从而反回最新的数据,也就是根据浅拷贝的原因,把想改变的数据用新对象替换,如果不用新对象替换引用类型地址没有变视为不更新
subscribe:渲染页面,也就是里面调用的setState,调用它后,就会调用render方法重新渲染,根据最新的数据
connect(高阶组件):通过高阶组件与原生的context通信,它就是将最新的数据绑定要传进来的组件上,使被传进来的组件可以取到最新的state数据,也就是所谓的被包装组件
Connect 会去 context 里面取出 store。把 store 里面的数据取出来通过 props 传给 传进来的函数
connect
connect中mapStateTopProps参数的作用:(高阶组件的入参)
mapStateTopProps相当于告知了Connect应该如何去 store 里面取数据,然后可以把这个函数的返回结果传给被包装的组件,还需要告诉高级组件我们需要什么数据,高阶组件才能正确地去取数据。
connect中mapDispatchToProps参数的作用:
来告诉它我们的组件需要如何触发dispatch。我们把这个参数叫mapDispatchToProps
2018年9月12日 学习react总结
1、在setState里更改state里的值,如何在当前组件,当前方法里取到最新的值:
(1)setState里加入第二个参数,为回调函数,在此回调内可以取到最新值
(2)在render生拿周期里直接取值
(3)加setTimeOut
2、不能在子组件里直接改props里的值,解决办法可以存在变量里,或在父组件里改
3、使用map之前进行非空判断以防报错
4、写行间样式用鸵峰式写法
5、在子组件使用props里的值时要先定义下初始值
学习react心得及总结的更多相关文章
- 从0开始学习react(一)
本人前端小菜鸡一枚,因为公司要重构网站,打算用用react,毕竟一切为了学习(装B)嘛!!! 在学习react之前,看了许多资料,博客,官方文档之类的,可我这记吃不记打的记性,还是需要在这里记录一下, ...
- 正式学习React(五) react-redux源码分析
磨刀不误砍柴工,咱先把react-redux里的工具函数分析一下: 源码点这里 shallowEqual.js export default function shallowEqual(objA, ...
- 正式学习React (七) react-router 源码分析
学习react已经有10来天了,对于react redux react-redux 的使用流程和原理,也已经有一定的了解,在我上一篇的实战项目里,我用到了react-route,其实对它还只是 停留在 ...
- 正式学习React(一) 开始学习之前必读
为什么要加这个必读!因为webpack本身是基于node环境的, 里面会涉及很多路径问题,我们可能对paths怎么写!webpack又是怎么找到这些paths的很迷惑. 本文是我已经写完正式学习Rea ...
- 正式学习 react(三)
有了基础的webpack基础,我们要对react的基本语法进行学习. 我这个教程全部用es6 实现.可能会忽略一些最基本的语法讲解,这些你在官网上或者其他别的地方都比我讲的全. 今天我要讲一下reac ...
- 学习react,动手实现一个小demo(仿知乎问答)
学习react也有一周的时间,最近自己做了个仿知乎问答的小demo,项目源码在github上:https://github.com/yang302/reactQa 使用技术:bower+gulp+re ...
- 五分钟学习React(三):纯HTML代码搭建React应用
上一期我们使用了React官方的脚手架运行React应用.大家可能会觉得这种方法很繁琐,需要配置各种第三方插件.JQuery时代的前端真是让人怀念.这一期,我就带领大家创建一个"怀旧版&qu ...
- 五分钟学习React(一): 什么是React
在前端的世界里,我们要处理的文件不是太多,而是太少.每天开发项目将html.css.js.图片.字体文件都像大杂烩一般加载都网页上.当应用变得越来越臃肿的时候,会发现js用了那么多全局变量,css的继 ...
- 学习React Native必看的几个开源项目
学习React native ,分享几个不错的开源项目,相信你学完之后,一定会有所收获.如果还没有了解RN的同学们可以参考手把手教你React Native 实战之开山篇<一> 1.Fac ...
随机推荐
- mdb
计划开发高性能KV数据库, 学习MongoDB leveldb innodb, 练手贴+日记贴: http://bbs.chinaunix.net/thread-4244870-1-1.html 超高 ...
- 安卓利用Handlers,AsyncTask和Loaders运行后台程序
安卓的用户界面线程(user interface thread) 1.1 主线程 安卓修改用户界面并从一个单一用户界面线程中处理输入事件,这个线程也被称作主线程(main thread) Androi ...
- Linux系统优化及状态监控
1.查看系统进程命令 top 进入后可按s 加时间,指定多长时间刷新一次 2.查看cpu信息 cat /proc/cpuinfo 3.查看内存信息 cat /proc/meminfo 4.清理内存:主 ...
- jmeter-性能监控(InfluxDB+Grafana)
测试结果实时监控:jmeter+influxdb+grafana InfluxDB:存储实时数据的DB Grafana:DB中存储的实时数据可以在浏览器查看 --------------------- ...
- JavaScript 类型转换(2)
隐式类型转换 1. var a = "123"; a++; 这时候会将调用Number("123")将"123"转换成数字类型,然后再自增. ...
- ArcGIS应用——使用Python为图斑连续编号及扩展应用
为图斑连续编号 在GIS应用中,为图斑连续编号(编号递增)是一项常见的需求,利用ArcGIS,可以方便的实现. Python脚本如下: rec=0 def autoIncrement(): globa ...
- 读取IE缓存文件
使用WebCacheTool项目中的WinInetAPI.cs和Win32API.cs两个类 /// <summary> /// 获取IE缓存文件 /// </summary> ...
- 按照已有的模板输出<一>(如发票)
按照已有的模板输出<一> 普通的发票基本上都是固定模式,所以我们一般写好固定的模板,把其中需要变动的地方,以特定符号来代替.每次打印发票的时候,只需将其中的特定符号转换成我们需要显示的数据 ...
- c# 与 Mysql 的通讯方式总结
两种开发方式 1.使用 vs 自带的可视化工具,不推荐. 在 vs 的项目中添加 ‘数据集’,然后通过可视化的工具添加数据库为数据源,默认可添加 SQL Server 和 Oracle 等,添加 My ...
- Webbench的使用
Webbench是一个在linux下使用的非常简单的网站压测工具. 它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力 ...