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

最新文章

  1. 让 select 的 option 标签支持事件监听(如复制操作)
  2. atitit.事件驱动的总结attilax
  3. 绘制图形与3D增强技巧(四)----多边形图元及其点画模式
  4. unity3d使用脚本保存屏幕截图
  5. iOS中两个APP之间的跳转和通信
  6. python 读写文件和设置文件的字符编码
  7. javascript基础总结
  8. C# 调用C++动态链接库
  9. FZU 2093 找兔子 状压DP
  10. highcharts dynamic change line color
  11. 【转】Python实现修改Windows CMD命令行输出颜色(完全解析)
  12. aps .net MVC单用户登录
  13. win PowerCmd命令行工具安装
  14. DLL补丁劫持制作
  15. 【Linux】shell学习之sed
  16. LINUX 内存使用情况
  17. Android学习路-Android Studio的工程目录
  18. ZT 互联网——降级论
  19. 实验楼学习linux第一章第四节linux目录结构及文件基本操作
  20. Decorator Pattern (装饰者模式)

热门文章

  1. 什么是网站CDN服务,CDN加速原理?
  2. [Elm] Functions in Elm
  3. QAtomicInt支持四种类型的操作,Relaxed、Acquired、Release、Ordered
  4. CompletionService 和ExecutorService的区别和用法
  5. 广播(broadcast)、电视与电视网络
  6. jquery ajax跨域 thinkphp getjson
  7. Home界面的启动
  8. [Django] Auth django app with rest api
  9. [Javascript] Javascript 'in' opreator
  10. C#趣味程序---个位数为6,且能被3整出的五位数