React学习(3)——ref,key,PureComponent,bindActionCreator
ref
如果在
html里设置ref那么它就指向这个真实的DOM节点。如果在组件里设置
ref,那么它就指向这个组件实例的引用,和组件里面的this互等。我们经常在表单
input,select里使用,获取其value,如: this.refs.ad.value 。
key
一个组件,可能会调用很多次,
比如在
ul里有很多个li,为了区分各个
Li实例,一般我们使用map方法给li循环加上唯一的key,方便以后如果数据修改了可以快速更新。
PureComponent
作用:用于提高react性能
方法:当组件更新时,若props和state未改变,则render方法不触发。
原理:
React自动做了一层浅比较:if (this._compositeType === CompositeTypes.PureClass) {
shouldUpdate = !shallowEqual(prevProps, nextProps)
|| !shallowEqual(inst.state, nextState);
}
shallowEqual比较Object.keys(state | props)的长度是否一致,每一个key是否两者都有,并且是否是一个引用,但只比较了第一层的值,确实很浅,所以深层的嵌套数据是对比不出来的。使用:只要把继承类从
Component换成PureComponent即可。注意:1. 易变数据不能使用一个引用
2. 不变数据使用一个引用
3. 复杂状态与简单状态不要共用一个组件
bindActionCreator:
返回包裹dispatch的函数,以直接使用。
相当于会dispatch这个action。
参数:
1、actionCretors ,对象或单个函数
2、dispatch函数返回:
1、若传入的参数是函数,则直接返回一个包裹dispatch的函数
2、若传入的参数是object,则根据相应的key,生成包裹dispatch的函数例子:
传入参数为函数:
const toggleTodo = (id) => {
return {
type: 'TOGGLE_TODO',
id
};
}; export { toggleTodo };
let boundActionCreators = bindActionCreators(toggleTodo, dispatch); //此时boundActionCreators = (id) => dispatch(toggleTodo(id));传入参数为object:
// 假设下面的actionCreator.js 我们import进来这个对象 export function addTodo(text) {
return {
type: 'ADD_TODO',
text
}
} export function removeTodo(id) {
return {
type: 'REMOVE_TODO',
id
}
}
// 得到的对象为 {
addTodo : text =>
{
type: 'ADD_TODO',
text
},
removeTodo : id => {
type: 'REMOVE_TODO',
id
}
}
// 经过bindActionCreator就会变成 {
addTodo : text => dispatch(addTodo('text'));
removeTodo : id => dispatch(removeTodo('id'));
}
参考:
http://www.wulv.site/2016-08-16/react%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0.html
http://www.wulv.site/2017-07-02/react-perf-code.html
https://wulv.site/2017-05-31/react-purecomponent.html
https://segmentfault.com/a/1190000011783611
React学习(3)——ref,key,PureComponent,bindActionCreator的更多相关文章
- React学习笔记-3-非dom属性介绍
非dom属性?dangerouslySetInnerHTML,ref,key非dom标准属性,也就是说dom标准里面没有规定的属性,react引入了三个非dom属性,如上.dangerouslySet ...
- React 学习笔记(1) 基础语法和生命周期
参看:视频地址 简单搭建一个react-cli: 2. React.createElement() 将object转化为 React语法 import React from 'react' impor ...
- React学习系列
React学习系列 系列学习react 翻译地址 https://scotch.io/tutorials/learning-react-getting-started-and-concepts 我是初 ...
- react学习笔记1--基础知识
什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...
- react 学习与使用记录
相关技术:webpack+react+react-router+redux+immutable 郭永峰react学习指南 1.git bash--windows命令行工具 --教程 下载地址 2. i ...
- 【JAVASCRIPT】React学习- 数据流(组件通信)
摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 一 组件通信如何实现 父子组件之间不存在继承关系 1.1 父=>子通信 父组件可以通过 this.refs.xx ...
- vue 和 react 学习 异同点
vue 和 react 学习 异同点 本文不做两个框架比较,只对比了两个框架的语法对比,不代表任何观点,盗版必究,本人唯一qq:421217189 欢迎大家一起来学习探讨,壮我大前端(本文markdo ...
- React学习笔记(一)- 入门笔记
React入门指南 作者:狐狸家的鱼 本文链接:React学习笔记 GitHub:sueRimn 1.组件内部状态state的修改 修改组件的每个状态,组件的render()方法都会再次运行.这样就可 ...
- React组件中的key
React组件中的key 一.key的作用 react中的key属性,它是一个特殊的属性,它是出现不是给开发者用的(例如你为一个组件设置key之后不能获取组件的这个key props),而是给reac ...
- React学习笔记-1-什么是react,react环境搭建以及第一个react实例
什么是react?react的官方网站:https://facebook.github.io/react/下图这个就是就是react的标志,非常巧合的是他和我们的github的编辑器Atom非常相似. ...
随机推荐
- angular表单经验分享
原文 https://www.jianshu.com/p/af359bd04f32 大纲 1.表单的名字不可以和传入的值的名字相同 2.在模板驱动表单的时候要使用angular表单的验证功能,需要将n ...
- 那些移动端web踩过的坑2
原文链接:https://geniuspeng.github.io/2018/04/26/mobile-issues2/ 坑是无穷无尽的,嗯-长江后坑推前坑~~ 关于音频自动播放 H5的audio标签 ...
- 使用ToolRunner运行Hadoop程序基本原理分析 分类: A1_HADOOP 2014-08-22 11:03 3462人阅读 评论(1) 收藏
为了简化命令行方式运行作业,Hadoop自带了一些辅助类.GenericOptionsParser是一个类,用来解释常用的Hadoop命令行选项,并根据需要,为Configuration对象设置相应的 ...
- CreateFeature与CreateFeatureBuffer区别
转自原文CreateFeature与CreateFeatureBuffer区别 CreateFeature主要用于插入一条数据,CreateFeatureBuffer住哟啊用于插入多条数据,详细说明见 ...
- 使用pprof及Go 程序的性能优化
使用Golang 程序的性能优化及 Pprof 程序的性能优化无非就是对程序占用资源的优化.对于服务器而言,最重要的两项资源莫过于 CPU 和内存.性能优化,就是在对于不影响程序数据处理能力的情况下, ...
- 面试无忧之Zookeeper总结心得
为什么需要分布式系统 l 单机系统已经无法满足业务需要 l 高性能硬件价格昂贵 分布式系统带来哪些问题 l 集群中节点数据一致性问题 l 集群产生分区 l 负载问题 l 幂等性问题 l 可用性问题 l ...
- 建立一个OTP应用
http://www.javaeye.com/topic/374167 以下是在erlang项目开发中的一些记录,即包含很多通俗易懂的原则,也包含一些似是而非的建议,比较混乱,还没有积累到一个可以分门 ...
- WPF 针对数据源某个属性进行排序
原文:WPF 针对数据源某个属性进行排序 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wanlong360599336/article/detai ...
- Swagger与postman使用心得
Swagger接口文档,在线自动生成模板和页面.服务器地址加上swagger-ui.html后缀即可访问到(https://域名:端口号/swagger-ui.html). 使用时在java代码中引用 ...
- sql server中查询结果集顺序问题
因为优化器可能会选择并行处理,或者在多文件情况下不按“期待”顺序扫描数据,所以无法保证数据的顺序.唯一能确保顺序的只有order by. 并行处理的过程导致顺序不一致,单核上不存在并行,而双核,可能使 ...