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的更多相关文章

  1. React学习笔记-3-非dom属性介绍

    非dom属性?dangerouslySetInnerHTML,ref,key非dom标准属性,也就是说dom标准里面没有规定的属性,react引入了三个非dom属性,如上.dangerouslySet ...

  2. React 学习笔记(1) 基础语法和生命周期

    参看:视频地址 简单搭建一个react-cli: 2. React.createElement() 将object转化为 React语法 import React from 'react' impor ...

  3. React学习系列

    React学习系列 系列学习react 翻译地址 https://scotch.io/tutorials/learning-react-getting-started-and-concepts 我是初 ...

  4. react学习笔记1--基础知识

    什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...

  5. react 学习与使用记录

    相关技术:webpack+react+react-router+redux+immutable 郭永峰react学习指南 1.git bash--windows命令行工具 --教程 下载地址 2. i ...

  6. 【JAVASCRIPT】React学习- 数据流(组件通信)

    摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 一 组件通信如何实现 父子组件之间不存在继承关系 1.1 父=>子通信 父组件可以通过 this.refs.xx ...

  7. vue 和 react 学习 异同点

    vue 和 react 学习 异同点 本文不做两个框架比较,只对比了两个框架的语法对比,不代表任何观点,盗版必究,本人唯一qq:421217189 欢迎大家一起来学习探讨,壮我大前端(本文markdo ...

  8. React学习笔记(一)- 入门笔记

    React入门指南 作者:狐狸家的鱼 本文链接:React学习笔记 GitHub:sueRimn 1.组件内部状态state的修改 修改组件的每个状态,组件的render()方法都会再次运行.这样就可 ...

  9. React组件中的key

    React组件中的key 一.key的作用 react中的key属性,它是一个特殊的属性,它是出现不是给开发者用的(例如你为一个组件设置key之后不能获取组件的这个key props),而是给reac ...

  10. React学习笔记-1-什么是react,react环境搭建以及第一个react实例

    什么是react?react的官方网站:https://facebook.github.io/react/下图这个就是就是react的标志,非常巧合的是他和我们的github的编辑器Atom非常相似. ...

随机推荐

  1. [AngularFire2] Build a Custom Node Backend Using Firebase Queue

    In this lesson we are going to learn how to build a custom Node process for batch processing of Fire ...

  2. Hadoop常见异常及其解决方案 分类: A1_HADOOP 2014-07-09 15:02 4187人阅读 评论(0) 收藏

    1.Shell$ExitCodeException 现象:运行hadoop job时出现如下异常: 14/07/09 14:42:50 INFO mapreduce.Job: Task Id : at ...

  3. .NET Framework基础知识(四)(转载)

    .反射:是编程的读取与类型相关联的元数据的行为.通过读取元数据,可以了解它是什么类型以及类型的成员. 比如类中的属性,方法,事件等.所属命名空间System.Reflection. 例:using S ...

  4. sysbench压测Oracle

    安装: yum -y install make m4  autoconf automake libtool pkgconfig libaio-devel rpm -Uvh http://dl.fedo ...

  5. Mysql 安装(Using Generic Binaries)

    本次 Mysql 为Community 5.6.21 版本号.安装方式为通用Linux安装方式.即大多数Linux平台都能够採用该方式进行安装. 一.安装步骤 1.安装环境 1)Centos 7.0. ...

  6. 【u022】车的放置

    [问题描述] [题解] 先考虑一个最简单的情况.如一个n*n的棋盘.然后要放k个车. 我们可以先选出k行即C(n,k); 然后在列上对这k个棋子进行一次全排列即A(n,k); 比如k = 4;N=5 ...

  7. 【t082】牛跑步

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 新牛到部队,CG要求它们每天早上搞晨跑,从A农场跑到B农场.从A农场到B农场中有n-2个路口,分别标上 ...

  8. NOI模拟 颜色 - 带修莫队/树套树

    题意: 一个颜色序列,\(a_1, a_2, ...a_i\)表示第i个的颜色,给出每种颜色的美丽度\(w_i\),定义一段颜色的美丽值为该段颜色的美丽值之和(重复的只计算一次),每次都会修改某个位置 ...

  9. 使用蒲公英来发布iOS内侧版本

    1.生成ipa包 这里不介绍正规的打包方式(选择真机调试-编译成功以后-工具product-archive-....) 下面介绍快速打包方式: 1)选择真机调试-编译成功以后右击下图.app文件,选择 ...

  10. erlang 符号相关基本语法

    http://blog.csdn.net/anghlq/article/details/6803332 ErLang语法约定: 大写字母开头的名字(比如Address),表示一个变量,包括参数.局部变 ...