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

问:React的setState为什么是异步的?_2023-03-01

前言 不知道大家有没有过这个疑问,React 中 setState() 为什么是异步的?...最后 Dan 总结说,React 模型更愿意保证内部的一致性和状态提升的安全性,而不总是追求代码的简洁性。...假设你在一个聊天窗口,你正在输入消息,TextBox 组件中的 setState() 调用需要被立即应用。然而,在你输入过程中又收到了一条新消息。...更好的处理方式或许是延迟渲染新的 MessageBubble 组件,从而让你的输入更加顺畅,而不是立即渲染新的 MessageBubble 组件阻塞线程,导致你输入抖动和延迟。...Dan 最后对 Michel 说到:我希望我们能在接下来几个月说服你,并且你会欣赏到 React 模型的灵活性。据我理解,这种灵活性至少一部分要归功于 state 的异步更新。

80750

问:React的setState为什么是异步的?

前言不知道大家有没有过这个疑问,React 中 setState() 为什么是异步的?...最后 Dan 总结说,React 模型更愿意保证内部的一致性和状态提升的安全性,而不总是追求代码的简洁性。...假设你在一个聊天窗口,你正在输入消息,TextBox 组件中的 setState() 调用需要被立即应用。然而,在你输入过程中又收到了一条新消息。...更好的处理方式或许是延迟渲染新的 MessageBubble 组件,从而让你的输入更加顺畅,而不是立即渲染新的 MessageBubble 组件阻塞线程,导致你输入抖动和延迟。...Dan 最后对 Michel 说到:我希望我们能在接下来几个月说服你,并且你会欣赏到 React 模型的灵活性。据我理解,这种灵活性至少一部分要归功于 state 的异步更新。

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

    React中的setState为什么是异步的?

    前言不知道大家有没有过这个疑问,React 中 setState() 为什么是异步的?...最后 Dan 总结说,React 模型更愿意保证内部的一致性和状态提升的安全性,而不总是追求代码的简洁性。...假设你在一个聊天窗口,你正在输入消息,TextBox 组件中的 setState() 调用需要被立即应用。然而,在你输入过程中又收到了一条新消息。...更好的处理方式或许是延迟渲染新的 MessageBubble 组件,从而让你的输入更加顺畅,而不是立即渲染新的 MessageBubble 组件阻塞线程,导致你输入抖动和延迟。...Dan 最后对 Michel 说到:我希望我们能在接下来几个月说服你,并且你会欣赏到 React 模型的灵活性。据我理解,这种灵活性至少一部分要归功于 state 的异步更新。

    1.5K30

    把 React 作为 UI 运行时来使用

    这就是为什么每次当输出中包含元素数组时,React 都会让你指定一个叫做 key 的属性: ? key 给予 React 判断子元素是否真正相同的能力,即使在渲染前后它在父元素中的位置不是相同的。...App :我要渲染包含 的 。 React: ,你要渲染什么? Layout :我要在 中渲染我的子元素。... :我要渲染含有文本的 。 React: 好的,让我们开始吧: ? 这就是为什么我们说协调是递归式的。...如果在同一位置的 type 改变了(由索引和可选的 key 决定),React 会删除其中的宿主实例并将其重建。 控制反转 你也许会好奇:为什么我们不直接调用组件?...这些 Hooks 的规则能够被 linter plugin 所规范。有很多关于这种设计选择的激烈争论,但在实践中我并没有看到它让人困惑。我还写了关于为什么通常提出的替代方案不起作用的文章。

    2.5K40

    我的react面试题笔记整理(附答案)

    为什么它很重要?组件状态数据或者属性数据发生更新的时候,组件会进入存在期,视图会渲染更新。...因为 dom 的描绘非常消耗性能,如果我们能在 shouldComponentUpdate 方法中能够写出更优化的 dom diff 算法,可以极大的提高性能。...而replaceState 是完全替换原来的状态,相当于赋值,将原来的 state 替换为另一个对象,如果新状态属性减少,那么 state 中就没有这个状态了。React中的props为什么是只读的?...props的不可以变性就保证的相同的输入,页面显示的内容是一样的,并且不会产生副作用哪些方法会触发 React 重新渲染?重新渲染 render 会做些什么?...在回调中你可以使用箭头函数,但问题是每次组件渲染时都会创建一个新的回调。为什么使用jsx的组件中没有看到使用react却需要引入react?

    1.2K20

    【Hooks】:不是魔法,仅仅是数组

    React是怎么做的? 2.1. 初始化 2.2. 首次渲染 2.3. 随后的渲染 2.4. 事件处理 3. 为什么顺序很重要? 3.1. 糟糕的首次渲染 3.2....糟糕的二次渲染 4. 结论 我是 hooks api 的粉丝,但是,在使用 hooks 的时候,它会有一些奇怪的约束。如果你很难理解这些规则,不妨看看这篇文章。 1....1.1. hooks 的 2 个规则 react 核心小组在提案文档指出,有 2 个使用规则是开发者必须去遵守的 不要在循环、条件语句、或嵌套函数中调用 hooks hooks 只能在函数组件中使用 第...React是怎么做的? 我们先标记下 React 内部可能是怎么实现。在渲染一个组件时会执行下图的逻辑。意思是说,数据是被存储在渲染组件之外。...现在应该明白了为什么 hooks 不能在条件分支和循环中。因为我们处理的是数据集合的指针,要是你改变了调用顺序,指针会对应不上,从而指向错误的数据或处理器。 4.

    67110

    通过 React Hooks 声明式地使用 setInterval

    不关心为什么这样实现的读者,就不用继续阅读了。下面的内容是为希望深入理解 React Hooks 的读者而准备的。 --- 哈?! 我知道你想什么: Dan,这代码不对劲。...开始之前,我先介绍下这份实现的能力。 --- 为什么 useInterval() 是一个更合理的 API?...然而,这段代码有个诡异的行为。 React 默认会在每次渲染时,都重新执行 effects。这是符合预期的,这机制规避了早期在 React Class 组件中存在的一系列问题。...而是 React 编程模型,与命令式的 setInterval API 之间的不匹配。...可能在多次渲染之间变更,我需要把它声明为计时器 effect 的依赖: useEffect(() => { function tick() { savedCallback.current(

    7.6K220

    全面了解 React Suspense 和 Hooks

    / 2018-12-23 为什么不推荐在 componentwillmount 里最获取数据的操作呢? 这个问题被过问很多遍了, 前几天又讨论到这个问题, 就以这个作为切入点吧。...这个问题和设备性能没有多大关系, 归根结底还是同步渲染机制的问题。 目前的React 版本(v16.7), 当组件树很大的时候,也会出现这个问题, 逐层渲染, 逐渐深入,不更新完就不会停。...访问到当前组件(强制避免一些有副作用的操作),输入只能通过参数,对组件渲染的影响只能通过返回值。...看到这你可能觉得奇怪, 怎么还需要用个 包起来, 有啥用, 不包行不行。 哎嗨, 不包还真是不行。为什么呢?...hooks React v16.7.0-alpha 中第一次引入了 Hooks 的概念, 为什么要引入这个东西呢?

    93221

    2年过去了,React Forget 凉了么?

    举个例子,对于列表的渲染,包括两个步骤: 首屏渲染(mount),渲染空列表 获取到数据后,渲染(rerender)包含数据的列表 所以,React Forget通过提高rerender速度,提高了页面加载速度...Sathya Gunasekaran 好在React作为一种DSL,相比纯JS实现的项目多了很多约束,使得静态分析成为可能,比如: React组件类似于纯函数,这意味着相同的输入(props)会获得相同的输出...videos; $[1] = filter; $[2] = filterdList; } else { filterdList = $[2]; } // ...省略 } 为什么不直接生成...主要有两个原因: 对于一个FC,大部分原生Hook的数据会保存在一条单向链表中(这也是「不能在条件语句中写 Hooks」的原因),会占用更多内存 在React Forget生成的代码中,缓存保存在useMemoCache...这也意味着useMemoCache可以不遵守「不能在条件语句中写 Hooks」这条规定。

    64140

    美团前端一面必会react面试题4

    这种组件在React中被称为受控组件,在受控组件中,组件渲染出的状态与它的value或checked属性相对应,react通过这种方式消除了组件的局部状态,使整个状态可控。...方法更新state,就会触发视图的重新渲染,完成表单组件的更新受控组件缺陷: 表单元素的值都是由React组件进行管理,当有多个输入框,或者多个这种组件时,如果想同时获取到全部的值就必须每个都要编写事件处理函数...DOM如果是现用现取的称为非受控组件,而通过setState将输入的值维护到了state中,需要时再从state中取出,这里的数据就受到了state的控制,称为受控组件。...尽管 React 使用高度优化的 Diff 算法,但是这个过程仍然会损耗性能.为什么React并不推荐优先考虑使用Context?...总之,在 EMAScript6语法规范中,组件方法的作用域是可以改变的。React中可以在render访问refs吗?为什么?

    3K30

    React 面试必知必会 Day9

    大家好,我是洛竹?,一只住在杭城的木系前端??‍♀️,如果你喜欢我的文章?,可以通过点赞帮我聚集灵力⭐️。 本文翻译自 sudheerj/reactjs-interview-questions 1....为什么在 setState() 中首选函数而不是对象? React 可以将多个 setState() 的调用批量化为一次更新,以提高性能。...我们需要记住,这些事件只能在支持 Pointer Events 规范的浏览器中工作。 以下事件类型现在在 React DOM 中可用。...为什么组件名称要以大写字母开头? 如果你使用 JSX 渲染你的组件,该组件的名称必须以大写字母开头,否则 React 将抛出一个错误,即未识别的标签。...请使用普通的 JavaScript 类来代替。 10. 你能在不调用 setState 的情况下强制一个组件重新渲染吗? 默认情况下,当你的组件的状态或 props 改变时,你的组件会重新渲染。

    1K30

    99.精读《Scheduling in React》

    在 Synchronous 与 Debounced 模式下的效果都不尽如人意,只有 Concurrent 模式下看起来是顺畅的。 那么为什么普通的 Demo 会很卡呢?...JS 是单线程的,浏览器同一时间只能做一件事情,而肉眼能识别的刷新频率在 60FPS 左右,这意味着我们需要在 16ms 之内完成 Demo 中的三件事:响应用户输入,做动画,Dom 渲染。...总结一下有两个主要问题: 长时间运行的任务造成页面卡顿,我们需要保证所有任务能在几毫秒内完成,这样才能保证页面的流畅。 不同任务优先级不同,比如响应用户输入的任务优先级就高于动画。这个很好理解。...为了保证不产生阻塞的感觉,调度系统会将所有待执行的回调函数存在一份清单中,在每次浏览器渲染时间分片间尽可能的执行,并将没有执行完的内容 Hold 住留到下个分片处理。...调度系统能力有限,只能在浏览器提供的能力范围内进行调度,而无法影响比如 Html 的渲染、回收周期。

    36930

    React 困境与未来,何时迎来自己的“Angular.js 时刻”?

    正因为如此,大部分 React 开发者才对单页应用架构非常满意。如果真需要做服务端渲染,我们完全可以选择生态系统比 React 服务端组件更成熟的其他工具。 那既然用不上,我们为什么还要认真讨论?...或者更确切地讲,他们不鼓励开发者在不配合框架的前提下使用 React,而他们所推荐的框架会更多强调服务端渲染。 还有第二个问题。React.js 官方文档主要推荐使用 Next.js。...我不禁怀疑,Next.js 目前的作法并不是要帮助开发者,而是想帮 Vercel 宣传 React。SPA 本身没有营销空间——一旦编译完成,SPA 就是一个能在任何地方随意托管的 JS 文件。...但服务端渲染的应用必须借助服务器才能运行,而服务器显然是可以营销的产品。也许我有点阴谋论的倾向,但除此之外我真的无法理解为什么要如此明目张胆地破坏 React 生态系统。...我也希望看到 Next.js 能在自己的官方文档中淡化对服务端组件的强调,或者至少要明确标注其尚属于“Alpha”功能。 当然,也许事实证明我是错的,服务端组件才是未来。

    26510

    setState同步异步场景

    也就是说,相比较于React,为什么不能在同样做批处理的情况下,立即将setState更新写入this.state而不等待协调结束。...this.state会立即刷新,而this.props不会,而且我们不能在不重新渲染父对象的情况下立即刷新this.props,这意味着我们将不得不放弃批处理的策略。...对于现在我们一直在谈论的异步渲染,我承认我们在传达这意味着什么方面做得不是很好,但这就是研发的本质:你追求一个在概念上看起来很有前途的想法,但只有在花了足够的时间之后才能真正理解它的含义。...例如你现在正在打字,那么TextBox组件需要实时的刷新,但是当你在输入的时候,来了一个信息,这个时候可能让信息的渲染延迟到某个阈值,而不是因为阻塞线程而让输入卡顿。...如果您自己不编写任何协调代码,您可以选择在更新时间超过某个阈值时显示导航器,否则当整个新子树的异步依赖项是时让React执行无缝转换使满意。

    2.4K10

    我的react面试题整理2(附答案)

    方法更新state,就会触发视图的重新渲染,完成表单组件的更新受控组件缺陷: 表单元素的值都是由React组件进行管理,当有多个输入框,或者多个这种组件时,如果想同时获取到全部的值就必须每个都要编写事件处理函数...DOM如果是现用现取的称为非受控组件,而通过setState将输入的值维护到了state中,需要时再从state中取出,这里的数据就受到了state的控制,称为受控组件。...为什么?...refs 是什么refs是react中引用的简写,有主语存储特定 React 元素或组件的引用的属性,它将由组件渲染配置函数返回当我们需要输入框的内容,触发动画等时候可以使用refsReact 高阶组件...、Render props、hooks 有什么区别,为什么要不断迭代这三者是目前react解决代码复用的主要方式:高阶组件(HOC)是 React 中用于复用组件逻辑的一种高级技巧。

    4.4K20

    React高频面试题(附答案)

    单一状态树可以更容易地跟踪随时间的变化,并调试或检查程序refs 是什么refs是react中引用的简写,有主语存储特定 React 元素或组件的引用的属性,它将由组件渲染配置函数返回当我们需要输入框的内容...在 React16 中,用一个类似的新生命周期 getDerivedStateFromProps 来代替它。React中可以在render访问refs吗?为什么?...输出(渲染)只取决于输入(属性),无副作用视图和数据的解耦分离缺点:无法使用 ref无生命周期方法无法控制组件的重渲染,因为无法使用shouldComponentUpdate 方法,当组件接受到新的属性时则会重渲染总结...(片段):可以返回多个元素;Portals(插槽):可以将子元素渲染到不同的 DOM 子树种;字符串和数字:被渲染成 DOM 中的 text 节点;布尔值或 null:不渲染任何内容。...此外,这还是 React 官方推荐的发起 ajax 请求的时机。该方法和 componentWillMount 一样,有且仅有一次调用。React 废弃了哪些生命周期?为什么?

    1.5K21

    【愚公系列】2023年03月 其他-Web前端基础面试题(react专项_35道)

    ) 的目的是什么 7、React事件处理 8、React如何创建refs 9、什么是JSX 10、为什么不直接更新state状态 11、React中的这三个点(...)是做什么的 12、简单介绍下react...传递 props 给 super() 的原因则是便(在子类中能在 constructor 访问 this.props。...React在不使用JSX的情况下一样可以工作,然而使用JSX可以提高组件的可读性,因此推荐使用JSX 10、为什么不直接更新state状态 如果直接更新state状态,那么它将不会重新渲染组件,而是使用...一旦通过setState方法更新state,就会触发视图的重新渲染,完成表单组件的更新 受控组件缺陷: 表单元素的值都是由React组件进行管理,当有多个输入框,或者多个这种组件时,如果想同时获取到全部的值就必须每个都要编写事件处理函数...传递 props 给 super() 的原因则是便于(在子类中)能在 constructor 访问 this.props 。

    7.6K10
    领券