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

当原子状态更新到以前的值时,React反冲选择器不触发其get

React是一个用于构建用户界面的JavaScript库。它采用了虚拟DOM的概念,通过将组件的状态与DOM进行比较,以最小化DOM操作,提高性能和效率。

在React中,使用选择器(Selector)可以从组件的状态中获取特定的数据。选择器可以通过使用createSelector函数来创建,该函数接受一个或多个输入选择器和一个转换函数作为参数,并返回一个新的选择器。

当原子状态更新到以前的值时,React的反冲选择器不会触发其get方法。这是因为React使用了浅比较(shallow comparison)来检测状态的变化。当状态更新时,React会比较新的状态与旧的状态是否相等,如果相等,则认为状态没有发生变化,不会触发重新渲染。

在这种情况下,即使原子状态的值发生了变化,但由于浅比较的机制,React并不会触发选择器的get方法,因此无法获取到更新后的值。

解决这个问题的方法是使用深比较(deep comparison)来检测状态的变化。可以通过使用isEqual函数或其他深比较的方法来比较新旧状态的值。如果新旧状态的值不相等,则可以触发选择器的get方法,获取更新后的值。

需要注意的是,深比较可能会带来性能上的损耗,因为它需要比较较大的数据结构。因此,在使用深比较时,需要权衡性能和准确性的需求。

总结起来,当原子状态更新到以前的值时,React反冲选择器不会触发其get方法。解决这个问题的方法是使用深比较来检测状态的变化,并触发选择器的get方法获取更新后的值。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):提供可扩展的计算能力,满足不同规模和需求的业务。 链接:https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CDB):提供高性能、可扩展的关系型数据库服务。 链接:https://cloud.tencent.com/product/cdb
  • 云原生容器服务(TKE):基于Kubernetes的容器管理服务,简化容器化应用的部署和管理。 链接:https://cloud.tencent.com/product/tke
  • 人工智能开放平台(AI):提供丰富的人工智能服务和工具,包括图像识别、语音识别、自然语言处理等。 链接:https://cloud.tencent.com/product/ai

请注意,以上仅为腾讯云的一些相关产品,其他云计算品牌商也提供类似的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

聊聊两个状态管理库 Redux & Recoil

Atom 简单理解一下,atom 是包含了一份数据集合,这个集合是可共享,可修改。 组件可以订阅atom, 可以是一个, 也可以是多个, atom 发生改变触发再次渲染。...相对于整个应用程序中其他原子选择器,该字符串应该是唯一。 default:atom初始。 atom 是存储状态最小单位, 一种合理设计是, atom 尽量小, 保持最大灵活性。..., atom 改变, 会触发重新计算。...相对于整个应用程序中其他原子选择器,该字符串应该是唯一. get:作为对象传递函数{ get },其中get是从其他案atom或selector检索函数。...get是从其他atom或selector检索函数。set是设置原子函数,其中第一个参数是原子名称,第二个参数是新

3.5K10

Facebook 新一代 React 状态管理库 Recoil

引入 Recoil Recoil 本身就是为了解决 React 全局数据流管理问题,采用分散管理原子状态设计模式。...Recoil 提出了一个新状态管理单位 Atom,它是可更新和可订阅一个 Atom 被更新,每个被订阅组件都会用新来重新渲染。...上面我们已经提到了 Atom 概念, Atom 是一种新状态,但是和传统 state 不同,它可以被任何组件订阅,一个 Atom 被更新,每个被订阅组件都会用新来重新渲染。...只需从选择器 get 回调中返回 Promise ,而不是返回本身。...另外,本身分散管理原子状态模式、读写分离、按需渲染、派生缓存等思想还是非常值得一学

1.6K10
  • React-全局状态管理群魔乱舞

    在实践中,涉及到实际「状态存储」,有两种主要方法。 ❝第一种是「由React自身维护」。...手动优化一个例子是「通过选择器函数订阅一块存储状态」。通过选择器读取状态组件只有在该特定状态更新才会重新渲染。 ❞ ❝第二种是为开发者「自动处理」,这样他们就不必考虑手动优化。...利用React「生命周期」来存储状态意味着容易利用组件卸载「自动垃圾收集」。...库 描述 React-Redux 利用特定选择器函数,「手动优化」 Recoil 通过订阅原子「半手动方式」 Jotai 通过订阅原子「半手动方式」 Zustand 利用特定选择器函数,「手动优化」...与大型单体存储相比,较小独立存储好处是,所有订阅组件卸载,它们可以自动收集垃圾。而大型单体存储如果没有适当内存管理,则容易出现内存泄漏。

    3.7K20

    前端框架_React知识点精讲

    React开始「状态更新」,它建立了一个所谓workInProgress 树workInProgress Tree,反映了「未来」将被刷新到屏幕上状态。...提供「优化内存使用」机制 利用React「生命周期」来存储状态意味着容易利用组件卸载「自动垃圾收集」。...对于状态管理库来说,如果在渲染过程中读取发生了变化,那么两个组件就有可能从外部存储中读取不同。...库 描述 React-Redux 利用特定选择器函数,「手动优化」 Recoil 通过订阅原子「半手动方式」 Jotai 通过订阅原子「半手动方式」 Zustand 利用特定选择器函数,「手动优化」...与大型单体存储相比,较小独立存储好处是,所有订阅组件卸载,它们可以自动收集垃圾。而大型单体存储如果没有适当内存管理,则容易出现内存泄漏。

    1.3K10

    2023再谈前端状态管理

    为了避免状态传递过程中出现混乱,React 引入了“单向数据流”理念。主要思想是组件不会改变接收数据,只会监听数据变化,数据发生变化时他们会使用接收到,而不是修改已有的。...组件更新机制触发后,他们只是使用新进行重新渲染。 父子组件通信可以直接使用 props 和回调方式;深层次、远距离组件则要通过“状态提升”和 props 层层传递。...缺点 Context 只能存储单一数据量大起来时,你可能需要使用createContext创建大量context; 直接使用的话,会有一定性能问题:每一次对state某个变更,都会导致其他使用该...Mobx学习成本更低,没有全家桶。 Mobx在更新state中深层嵌套属性方便,直接赋值就好了,redux则需要更新所有途经层级引用(当然搭配immer也麻烦)。...基于ES6 proxy ,使用观察者/可观察模式,当你修改一个,任何使用该组件都会自动重新渲染。 原子化管理状态,进行精确渲染。

    90910

    Sentry 开发者贡献指南 - 前端(ReactJS生态)

    触发某些逻辑并且没有立即在您断言逻辑中反映出来时,这可能会使您陷入一种虚假安全感。...例如:以前你会做类似的事情 let x = volume || 0.5; 这是一个问题,因为 0 是 volume 有效,但因为它计算结果为 false -y,我们不会使表达式短路,并且 x 为...https://github.com/getsentry/sentry/pull/15521 我们喜欢使用可选链和空合并而不是来自 lodash/get get。...使用 context 当我们计划远离 Reflux 路径,useContext hook 提供了一个简单实现选项来共享状态和行为。...您需要创建新共享状态,请考虑使用 context 和 useContext 而不是 Reflux。此外,可以利用虫洞状态管理模式来公开共享状态和突变函数。

    6.9K30

    React vs HTMX ,谁更适合你?

    HTMX 理念是让事情变得简单,让开发者能在丢弃熟悉 HTML 情况下,更深入多体验 Web 魔力。 HTMX 作为一种流线型和灵活选择,在由复杂前端框架主导宇宙中,独树一帜。...带有这些 HTMX 属性中一个 HTML 元素被触发,将会向给定URL发出指定类型 AJAX 请求。...你好 code秘密花园 非 GET 请求:元素是 ,AJAX 请求请求体会包含它所有输入,使用它们...元素不是 ,请求体将包含距离最近 中所有输入。或者,如果元素有 value 属性,那么也会被添加到 Request Body 中。...如果要将其他元素添加到请求体中,可以使用 hx-include 属性,然后通过 CSS 选择器选择出你想要在请求体中包含所有元素

    1.2K21

    152. 精读《recoil》

    然而 React Immutable 特性带来可预测性非常利于调试和维护: 断点调试变量与当前执行位置无关,已创建过不会突然 Mutable 突变,非常可预测。...在 React 框架下组件更新机制单一,只有引用变化才触发重渲染,而没有 Mutable 模式下 ForceUpdate 心智负担。...2 简介 Recoil 解决 React 全局数据流管理问题,采用分散管理原子状态设计模式,支持派生数据与异步查询,在基本功能上可以覆盖 Redux。...Immutable 模式中,对数据流只有读与写两种诉求,而申明式编程讲究是数据变化后 UI 自动 Rerender,那么对数据读自然而然就被赋予了订阅变化后触发 Rerender 期待,但是写与读不同...派生必须严格缓存,并在命中缓存引用保证严格相等。 原子存储数据相互无关联,所有关联数据都使用派生方式推导。

    81610

    滴滴前端二面react面试题总结

    **调用 setStateReact第一件事是将传递给setState对象合并到组件的当前状态,这将启动一个称为和解( reconciliation)过程。...componentWillReceiveProps:在初始化render时候不会执行,它会在组件接受到新状态(Props)触发,一般用于父组件状态更新子组件重新渲染shouldComponentUpdate...方法更新state,就会触发视图重新渲染,完成表单组件更新受控组件缺陷: 表单元素都是由React组件进行管理,有多个输入框,或者多个这种组件,如果想同时获取到全部就必须每个都要编写事件处理函数...因为非受控组件将真实数据储存在 DOM 节点中,所以在使用非受控组件,有时候反而容易同时集成 React 和非 React 代码。...而 vue 是通过对状态做代理,get 时候收集以来,然后修改状态时候就可以触发对应组件 render 了。有的同学可能会问,为什么 react 直接渲染对应组件呢?

    1K40

    最近几周react面试遇到题总结

    React 工作方式则不同。包含表单组件将跟踪状态输入,并在每次回调函数(例如onChange)触发重新渲染组件,因为状态被更新。...以这种方式由 React 控制输入表单元素称为受控组件。...使用pureComponent好处:组件更新,如果组件props或者state都没有改变,render函数就不会触发。省去虚拟DOM生成和对比过程,达到提升性能目的。...而 vue 是通过对状态做代理,get 时候收集以来,然后修改状态时候就可以触发对应组件 render 了。有的同学可能会问,为什么 react 直接渲染对应组件呢?...对componentWillReceiveProps 理解该方法props发生变化时执行,初始化render执行,在这个回调函数里面,你可以根据属性变化,通过调用this.setState()

    83160

    2020最新前端面试题_2020年前端面试题

    当你修改了data然后马上获取这个dom元素, 是不能获取到更新后,你需要使用$nextTick这个回调, 让修改后data渲染更新到dom元素之后在获取,才能成功。...25、vue和jQuery区别 jQuery是使用选择器($)选取DOM对象,对进行赋值、取值、事件绑定等操作, 其实和原生HTML区别只在于可以方便选取和操作DOM对象, 而数据和界面是在一起...给对象新增不存在属性,首先会把新属性进行响应式跟踪 然后会触发对象 ob dep收集到 watcher 去更新, 修改数组索引我们调用数组本身 splice 方法去更新数组。...important > 内联样式 > ID选择器 > 类选择器 > (标签选择器、伪类选择器、属性选择器) 不同层级下: 正常来说权重越高优先级越高,但是一直以来没有具体权重划分,...需要管理焦点、选择文本或媒体播放 触发式动画 与第三方 DOM 库集成 14、如何模块化 React代码? 可以使用 export 和 import 属性来模块化代码。

    6.7K10

    如何整理自己前端面试题库_2023-02-28

    ctrl+f5 强制刷新网页,直接从服务器加载,跳过强缓存和协商缓存; f5刷新网页,跳过强缓存,但是会检查协商缓存; 强缓存 Expires(该字段是 http1.0 规范,为一个绝对时间... computed 依赖状态发生改变,就会通知这个惰性 watcher,computed watcher 通过 this.dep.subs.length 判断有没有订阅者, 有的话,会重新计算,...(Vue 想确保不仅仅是计算属性依赖发生变化,而是计算属性最终计算发生变化时才会触发渲染 watcher 重新渲染,本质上是一种优化。)...使用后代选择器时候,浏览器会遍历所有子元素来确定是否是指定元素等等; (2)如果规则拥有ID选择器作为关键选择器,则不要为规则增加标签。...然后再往上 组件update阶段同理 前面是react16以前组建渲染方式。

    1.3K50

    最新Web前端面试题精选大全及答案「建议收藏」

    )无法取消Promise,一旦新建它就会立即执行,无法中途取消 2)如果设置回调函数,Promise内部抛出错误,不会反映到外部 3)处于pending(等待)状态,无法得知目前进展到哪一个阶段...$route.params.name url展示上:params类似于post,query类似于get,也就是安全问题,params传相对安全点,query通过url传参,刷新页面还在,params...27.对vue 中keep-alive理解 概念:keep-alive是vue内置组件,它动态包裹组件,会缓存活动组件实例,它自身不会渲染成一个DOM元素也不会出现在父组件链中 作用:在组件切换过程中将状态保留在内存中...计算属性是用来声明式描述一个依赖了其他所依赖后者变量发生变化时,计算属性也跟着改变, Watch监听是在data中定义变量,该变量变化时,会触发watch中方法 41.mvvm框架是什么...React在调用setstate后,react会将传入参数对象和组件当前状态合并,触发调和过程, 在调和过程中,react会根据新状态构建react元素树重新渲染整个UI界面,在得到元素树之后,react

    1.5K20

    你必须知道react redux 陷阱

    react redux介绍 React Redux 是 Redux 官方 React UI 绑定层。它允许您 React 组件从 Redux 存储中读取数据,并将操作分派到存储以更新状态。...简单来说,就是一个react官方支持状态管理库。star数超2W,不可谓火。但是今天要谈不是他优点和主流地位,而是谈使用它过程中可能遇到陷阱。...接下来我,详细说一下,他们发生条件: 陈旧props触发条件: 选择器函数依赖于该组件 props 来提取数据 作为一个动作结果,父组件会重新渲染并传递新道具 但是这个组件选择器函数在这个组件有机会用这些新道具重新渲染之前执行...“选择器函数”是接受 Redux 存储状态(或状态一部分)作为参数并返回基于该状态数据任何函数。...它根据 props 从 store 中读取一个,该数据不再存在,如果提取逻辑不小心,这可能会导致抛出错误。 嗯,其实我觉得这是一个使用方式问题,这种bug可以说是设计之初就决定不能这样使用

    2.5K30

    react 学习笔记

    比如当我们浏览器切换tab后,之前tab注册 requestIdleCallback 触发频率会变得很低 基于以上原因,React实现了功能完备 requestIdleCallbackpolyfill...元素没有确定 id 时候,万不得已你可以使用元素索引 index 作为 key 如果列表项目的顺序可能会变化,我们建议使用索引来用作 key ,因为这样做会导致性能变差,还可能引起组件状态问题...如果你选择指定显式 key ,那么 React 将默认使用索引用作为列表项目的 key 。 元素 key 只有放在就近数组上下文中才有意义。...当我们生成两个不同数组,我们可以使用相同 key Post 组件可以读出 props.xx,但是不能读出 props.key (key应该使用其他属性名来传递) 受控组件 表单元素依赖于状态...受控组件,表单元素修改会实时映射到状态上,此时就可以对输入内容进行校验. 受控组件只有继承React.Component才会有状态.

    1.3K20

    第八十六:前端即将或已经进入微件化时代

    每当组件第一次装载React将自动卸载和重新装载每个组件,并在第二次装载恢复以前状态。如果这打破了我们应用程序,考虑移除严格模式,直到我们可以修复组件以恢复现有状态弹性。...如果更新是在离散用户输入事件(如单击或按键事件)期间触发,则React始终同步刷新效果函数。以前,这种行为并不总是可预测或一致。 悬念树一致性。...(悬念*我个人理解为尚未加载到界面中内容)如果组件在完全添加到树之前挂起,React将不会在不完整状态下将其添加到树中,也不会激发效果。...树重新挂起并恢复为回退React现在将清除布局效果,然后在边界内内容再次显示重新创建它们。这解决了一个问题,即与未加载组件一起使用时,组件库无法正确测量布局。 新JS环境要求。...此警告是为订阅添加,但人们主要在设置状态良好情况下遇到它,而解决方法会使代码变得更糟。 抑制控制台日志。当我们使用严格模式React会对每个组件渲染两次,以帮助我们发现意外副作用。

    3K10

    前端二面react面试题整理

    参考 前端进阶面试题详细解答调和阶段 setState内部干了什么调用 setState React会做第一件事情是将传递给 setState 对象合并到组件的当前状态这将启动一个称为和解(reconciliation...componentWillReceiveProps:在初始化render时候不会执行,它会在组件接受到新状态(Props)触发,一般用于父组件状态更新子组件重新渲染shouldComponentUpdate...如果该属性是一个回调函数,它将接受底层DOM元素或组件已挂载实例作为第一个参数。可以在组件中存储它。...状态管理react 是通过 setState api 触发状态更新,更新以后就重新渲染整个 vdom。...而 vue 是通过对状态做代理,get 时候收集以来,然后修改状态时候就可以触发对应组件 render 了。有的同学可能会问,为什么 react 直接渲染对应组件呢?

    1.1K20

    2023金九银十必看前端面试题!2w字精品!

    默认情况下,层叠顺序为auto。 6. 解释CSS中伪类和伪元素区别,并给出一个示例。 答案:伪类用于向选择器添加特殊状态,如:hover、:active等。...答案:事件冒泡是指一个事件在DOM树中触发,它会从最内层元素开始向外传播至最外层元素。事件捕获是指一个事件在DOM树中触发,它会从最外层元素开始向内传播至最内层元素。 12....当用户输入改变表单元素,数据模型会自动更新;反之,数据模型改变,表单元素也会自动更新。 3. Vue中生命周期钩子有哪些?它们执行顺序是怎样?...组件包裹在中,组件状态将被保留,包括它实例、状态和DOM结构。这样可以避免在组件切换重复创建和销毁组件,提高性能和用户体验。 11....答案:重绘是指元素外观(如颜色、背景等)发生改变,但布局不受影响更新过程。重绘不会导致元素位置或大小发生变化。 重排是指元素布局属性(如宽度、高度、位置等)发生改变更新过程。

    45842

    开篇:通过 state 阐述 React 渲染

    ✓ 开篇:通过 state 阐述 React 渲染 说在前面 React中,有两种原因会导致组件渲染: 组件 初次渲染。 组件(或者祖先之一) 状态发生了改变。...组件(或者祖先之一)状态发生了改变。 渲染组件 在进行初次渲染, React 会调用根组件。 对于后续渲染, React 会调用内部状态更新触发了渲染函数组件。...一个 state 变量永远不会在一次渲染内部发生变化, 即使其事件处理函数代码是异步。它React 通过调用组件“获取 UI 快照”就被“固定”了。...React 执行函数 => 计算快照 => 更新 DOM 树 React 调用组件,它会为特定那一次渲染提供一张 state 快照。...将定时器函数提取出来,每次定时器触发,都能取到最新到 count const counterRef: any = useRef(null) counterRef.current = () => {setCount

    6900
    领券