首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在 React 16 中从 setState 返回 null 的妙用

概述 在 React 16 中为了防止不必要的 DOM 更新,允许你决定是否让 .setState 更来新状态。在调用 .setState返回 null 将不再触发更新。...React 16 对状态性能进行了改进,如果新的状态值与其现有值相同的话,通过在 setState返回 null 来防止来触发更新。 ?...如果值相同,setState返回 null。否则 setState 返回更新的 mocktail 状态,这将触发使用新状态重新渲染 Mocktail 组件。...但是,如果我们再次单击同一个mocktail按钮,React 不会重新渲染 Mocktail 组件,因为 setState 返回 null,所以状态没有改变,也就不会触发更新。...没有从 setState 返回 null ? 从 setState 返回 null 之后 注意:我在这里换了一个深色主题,以便更容易观察到 React DOM 中的更新。

14.5K20
您找到你想要的搜索结果了吗?
是的
没有找到

深入理解React生命周期

MyComponent.prototype.isPrototypeOf(ins), //true ele.type, //function MyComponent ele.props, //{abc:123} ele.key, //null...ele.ref //null); 开发者常常将被加载的组件象误认为是类似new MyComponnet的实例 实际上虚拟dom中的元素,是由React.createElement()创建的 元素是一种轻量对象描述...3.3 初始化和构造函数 在从元素初始化组件的过程中,props和state被定义 getDefaultProps() 或 MyComponent.defaultProps 3.4 State初始值 一旦...setState后尝试立即用this.state.xxx访问那个值,这容易引起bug React构造了一个更改队列,用来管理在方法链中对状态的多次更改;一旦状态更改被添加到队列中,React就会确保组件被添加到脏队列...;所以Redux中的reducers纯函数返回新对象,而Immutable.js(https://facebook.github.io/immutable-js/)每次操作都返回新的不可变数据结构,这些方法都确保了可以准确验证

1.3K10

三大图表库:ECharts 、 BizCharts 和 G2,该如何选择?广而告之

type="interval" position="genre*sold" color="genre" /> 复制代码 该示例中,图表的数据配置单独存入了其他js文件中...('year', '2012'); 复制代码 以下采用官网文档给出的示例进行分析 示例一 该表格里面的数据是美国各个州不同年龄段的人口数量,表格数据存放在类型为CVS的文件中 数据链接(该链接中为json....source(data, { type: 'csv', // 使用 CSV 类型的 Connector 装载 data,如果是json类型的数据,可以不进行设置,默认为json类型...初始化加工过的数据dvForAll c1.source(dvForAll); // 配置图表图例 c1.legend({ position: 'top', }); // 设置坐标轴配置,该方法返回...style: { stroke: 'red', strokeWidth: 5 } }); //当tooltip发生变化的时候,触发事件,修改ds的state状态量,一旦状态量改变

1.2K20

React进阶篇(十)性能优化

代码上的优化 列表项定义key属性 不推荐用索引作为key,因为一旦列表中的数据发生重排,数据的索引也会发生变化 key只要不在当前列表中重复即可 组件的属性值尽量不要用内联函数,如<Com1 action...// 这样,就只会在count改变的时候触发expensive执行,在修改val的时候,返回上一次缓存的值。...状态类型是array,创建新的数组返回(concat, slice, filter, map 会返回一个新数组): // add this.setState({ books: [...preState.books..., 'New book'] }) // remove this.setState({ books: preState.books.slice(1, 3) }) // filter this.setState...== 'React) }) 状态类型是不可变类型 - number, string, boolean, null, undefined 状态类型是object,创建新的对象返回(Object.assign

78620

三大图表库:ECharts 、 BizCharts 和 G2,该如何选择?

Geom type="interval" position="genre*sold" color="genre" /> 该示例中,图表的数据配置单独存入了其他js文件中...('year', '2012'); 以下采用官网文档给出的示例进行分析 示例一 该表格里面的数据是美国各个州不同年龄段的人口数量,表格数据存放在类型为CVS的文件中 数据链接(该链接中为json类型的数据....source(data, { type: 'csv', // 使用 CSV 类型的 Connector 装载 data,如果是json类型的数据,可以不进行设置,默认为json类型...初始化加工过的数据dvForAll c1.source(dvForAll); // 配置图表图例 c1.legend({ position: 'top', }); // 设置坐标轴配置,该方法返回...style: { stroke: 'red', strokeWidth: 5 } }); //当tooltip发生变化的时候,触发事件,修改ds的state状态量,一旦状态量改变

2K20

recat源码中的setState流程

, props) => stateChange,返回基于 state 和 props 构建的新对象,将被浅层合并到新的 state 中callback - 为可选的回调函数使用 setState() 改变状态之后...enqueueSetState(); enqueueCallback()源码路径 src/renderers/shared/stack/reconciler/ReactUpdateQueue.js这个文件导出了一个..._updateBatchNumber == null) { component....从而完成组件更新的整套流程在shouldComponentUpdate之前,执行了_processPendingState方法,该方法主要对state进行处理:如果更新队列为null,那么返回原来的state...;如果更新队列有一个更新,那么返回更新值;如果更新队列有多个更新,那么通过for循环将它们合并;在一个生命周期内,在componentShouldUpdate执行之前,所有的state变化都会被合并,最后统一处理

62040

从recat源码角度看setState流程

, props) => stateChange,返回基于 state 和 props 构建的新对象,将被浅层合并到新的 state 中callback - 为可选的回调函数使用 setState() 改变状态之后...enqueueSetState(); enqueueCallback()源码路径 src/renderers/shared/stack/reconciler/ReactUpdateQueue.js这个文件导出了一个..._updateBatchNumber == null) { component....从而完成组件更新的整套流程在shouldComponentUpdate之前,执行了_processPendingState方法,该方法主要对state进行处理:如果更新队列为null,那么返回原来的state...;如果更新队列有一个更新,那么返回更新值;如果更新队列有多个更新,那么通过for循环将它们合并;在一个生命周期内,在componentShouldUpdate执行之前,所有的state变化都会被合并,最后统一处理

42130

setState流程

, props) => stateChange,返回基于 state 和 props 构建的新对象,将被浅层合并到新的 state 中callback - 为可选的回调函数使用 setState() 改变状态之后...enqueueSetState(); enqueueCallback()源码路径 src/renderers/shared/stack/reconciler/ReactUpdateQueue.js这个文件导出了一个..._updateBatchNumber == null) { component....从而完成组件更新的整套流程在shouldComponentUpdate之前,执行了_processPendingState方法,该方法主要对state进行处理:如果更新队列为null,那么返回原来的state...;如果更新队列有一个更新,那么返回更新值;如果更新队列有多个更新,那么通过for循环将它们合并;在一个生命周期内,在componentShouldUpdate执行之前,所有的state变化都会被合并,最后统一处理

60220
领券