摘要:而不是在方法中在通过来获取使用回调函数方法接收一个作为回调函数。这样子直接输出,回调函数,对比如果默认为输入的结果是和渲染无关的状态尽量不要放在中来管理通常中只来管理和渲染有关的状态,从而保证改变的状态都是和渲染有关的状态。
原文: https://medium.com/@mweststra...
作者: Michel Weststrate
这篇文章原标题是3 Reasons why I stopped using React.setState,但是我对原文作者提出的论点不是很感冒,但是作者提出的三点对React新手来说是很容易忽略的地方,所以我在这里只提出部分内容,而且把标题改为使用React.setState需要注意的三点。
正文对React新手来说,使用setState是一件很复杂的事情。即使是熟练的React开发,也很有可能因为React的一些机制而产生一些bug,比如下面这个例子:
文档中也说明了当使用setState的时候,需要注意什么问题:
注意:
绝对不要 直接改变this.state,因为之后调用setState()可能会替换掉你做的改变。把this.state当做是不可变的。setState()不会立刻改变this.state,而是创建一个即将处理的state转变。在调用该方法之后访问this.state可能会返回现有的值。
对setState的调用没有任何同步性的保证,并且调用可能会为了性能收益批量执行。
setState()将总是触发一次重绘,除非在shouldComponentUpdate()中实现了条件渲染逻辑。如果可变对象被使用了,但又不能在shouldComponentUpdate()中实现这种逻辑,仅在新state和之前的state存在差异的时候调用setState()可以避免不必要的重新渲染。
总结出来,当使用setState的时候,有三个问题需要注意:
1. setState是异步的(译者注:不保证同步的)很多开发刚开始没有注意到setState是异步的。如果你修改一些state,然后直接查看它,你会看到之前的state。这是setState中最容易出错的地方。 setState这个词看起来并不像是异步的,所以如果你不假思索的用它,可能会造成bugs。下面这个例子很好的展示了这个问题:
class Select extends React.Component { constructor(props, context) { super(props, context) this.state = { selection: props.values[0] }; } render() { return (
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/81439.html
摘要:下面来逐步的解析图里的流程。一将事务放进队列中这里的可以传也可以传它会产生新的以一种的方式跟旧的进行合并。如果当前不在更新过程的话,则执行更新事务。以上即为的实现过程,最后还是用一个流程图在做一个总结吧参考文档 前言 学过react的人都知道,setState在react里是一个很重要的方法,使用它可以更新我们数据的状态,本篇文章从简单使用到深入到setState的内部,全方位为你揭开...
摘要:今天我们就来解读一下的源码。比较有意思,将定时器以方式提供出来,并且提供了方法。实现方式是,在组件内部维护一个定时器,实现了组件更新销毁时的计时器更新销毁操作,可以认为这种定时器的生命周期绑定了组件的生命周期,不用担心销毁和更新的问题。 1. 引言 React PowerPlug 是利用 render props 进行更好状态管理的工具库。 React 项目中,一般一个文件就是一个类,...
摘要:要实施这个方案,最大问题就是接口约定。讨论地址是精读做了什么如果你想参与讨论,请点击这里,每周都有新的主题,周末或周一发布。前端精读帮你筛选靠谱的内容。 1 引言 setState 是 React 框架最常用的命令,它是用来更新状态的,这也是 React 框架划时代的功能。 但是 setState 函数是 react 包导出的,他们又是如何与 react-dom react-nativ...
摘要:区别在于传入一个更新函数,就可以访问当前状态值。后面两次会同步更新,分别输出,很显然,我们可以将次简单规成两类是一类中的又是一类,因为这两次在不同的调用栈中执行。 写业务代码的时候 需要经常用到setState, 前几天review代码的时候, 又想了一下这个API, 发现对它的了解不是很清楚, 仅仅是 setState 是异步的, 周六在家参考了一些资料,简单整理了下,写的比较简单...
摘要:新的值回调函数。官方注解是给组件做个标记需要重新渲染,并且将可选的回调函数添加到函数列表中,这些函数将在重新渲染的时候执行。一共做了两件事一是通过执行方法来更新组件二是若方法传入了回调函数则将回调函数存入队列。 Q1 setState改变状态之后,不会立即更新state值。所以,如果改变state值,react是什么时候进行组件的更新呢?setState()到底做了一些什么呢? A1 ...
阅读 2014·2021-11-15 11:39
阅读 3194·2021-10-09 09:41
阅读 1457·2019-08-30 14:20
阅读 3229·2019-08-30 13:53
阅读 3299·2019-08-29 16:32
阅读 3281·2019-08-29 11:20
阅读 2981·2019-08-26 13:53
阅读 742·2019-08-26 12:18