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

Redux -如何保存输入值,而不考虑reRender?

Redux是一个用于JavaScript应用程序的可预测状态容器。它可以帮助开发人员管理应用程序的状态,并使状态的变化可追踪和可调试。Redux的核心概念包括store、action和reducer。

  1. Store(存储):Redux应用程序的状态存储在一个单一的JavaScript对象中,称为store。它是应用程序的唯一数据源,并且是只读的。可以通过调度action来更新store中的状态。
  2. Action(动作):Action是一个描述发生了什么的普通JavaScript对象。它必须包含一个type属性,用于指示要执行的操作类型。可以通过调用action creator来创建action。
  3. Reducer(归约器):Reducer是一个纯函数,它接收先前的状态和一个action作为参数,并返回一个新的状态。它定义了如何根据action来更新应用程序的状态。Redux应用程序可以有多个reducer,它们负责管理不同部分的状态。

在Redux中,保存输入值而不进行重新渲染的常见做法是使用浅比较来检测输入值的变化,并只有在输入值发生实际变化时才更新相关的状态。这可以通过使用Immutable.js或类似的库来实现。

另外,可以使用Redux的中间件来处理异步操作,例如redux-thunk或redux-saga。这些中间件可以帮助处理与服务器的通信,以及在异步操作完成后更新状态。

对于保存输入值的场景,可以考虑以下腾讯云相关产品和产品介绍链接地址:

  1. 腾讯云COS(对象存储):用于存储和管理大规模的非结构化数据,可以将用户输入值以文件的形式保存在COS中。产品介绍链接:https://cloud.tencent.com/product/cos
  2. 腾讯云数据库MySQL版:提供可扩展的关系型数据库服务,可以将用户输入值保存在数据库中。产品介绍链接:https://cloud.tencent.com/product/cdb_mysql
  3. 腾讯云云函数(Serverless):无需管理服务器即可运行代码,可以将用户输入值保存在云函数的环境变量中。产品介绍链接:https://cloud.tencent.com/product/scf

请注意,以上仅为示例,实际选择产品应根据具体需求进行评估和决策。

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

相关·内容

一篇看懂 React Hooks

Redux 的精髓就是 Reducer,利用 React Hooks 可以轻松创建一个 Redux 机制: // 这就是 Redux function useReducer(reducer, initialState...时执行,返回在析构时执行。...拿到组件 onChange 抛出的 效果:通过 useInputValue() 拿到 Input 框当前用户输入不是手动监听 onChange 再腾一个 otherInputValue 和一个回调函数把这一堆逻辑写在无关的地方...实际调用方式一般是,先通过 useState 拿到一个,再通过动画函数包住这个,这样组件就会从原本的刷新一次,变成刷新 N 次,拿到的也随着动画函数的规则变化,最后这个会稳定到最终的输入(如例子中的...实现:仔细观察一下结构,不难发现,我们只要结合 组件辅助 小节说的 “拿到组件 onChange 抛出的” 一节的思路,就能轻松理解 text、password 是如何作用于 input 组件,并拿到其输入状态

3.6K20

精读《怎么用 React Hooks 造轮子》

拿到组件 onChange 抛出的 效果:通过 useInputValue() 拿到 Input 框当前用户输入不是手动监听 onChange 再腾一个 otherInputValue和一个回调函数把这一堆逻辑写在无关的地方...实际调用方式一般是,先通过 useState 拿到一个,再通过动画函数包住这个,这样组件就会从原本的刷新一次,变成刷新 N 次,拿到的也随着动画函数的规则变化,最后这个会稳定到最终的输入(如例子中的...实现:仔细观察一下结构,不难发现,我们只要结合 组件辅助 小节说的 “拿到组件 onChange 抛出的” 一节的思路,就能轻松理解 text、password 是如何作用于 input 组件,并拿到其输入状态...我们考虑最小实现,也就是全局 Store + Provider 部分。...,从而让子组件 rerender

2.4K40

浅谈表单受控性及结合Hooks应用

特点: 表单元素的保存在组件的 state 中,以便在需要时进行访问、验证或提交。每当用户输入发生变化时,需要手动更新 state 来反映新的。...使用场景: 需要对用户输入进行验证和处理的表单 需要实时反映用户输入的表单 需要根据表单元素的动态地改变其他组件的状态或行为等情况时会使用到受控表单 示例代码: import React, { useState...特点: 表单元素的不会保存在组件的 state 中,而是通过 DOM 来获取。 可以通过 ref 来获取表单元素的不需要手动更新 state。...state 中,方便访问和操作 非受控组件需要依赖 ref 来获取元素,并且会受到组件生命周期变更影响 验证和实时性 可以实时验证和处理用户输入 不利于实时反映用户输入,不方便对用户输入进行验证和处理...: 由于 HOC 的设计 ,state 存于顶级组件,即便只有一个表单控件 value 改变,所有的子组件也会因父组件 rerender render,浪费了性能 总结: ant3 时代的 form

17510

问:你是如何进行react状态管理方案选择的?

缺点两种hooks管理方式都有一个很明显的缺点,会产生大量的无效rerender,如上例中的Count和Name组件,当state.count改变后,Name组件也会rerender,尽管他没有使用到state.count...Redux状态管理使用方法:1.引入reduxyarn add redux react-redux @types/react-redux redux-thunk2.新建reducer在src/store...action.types'// 声明参数接口interface Props { count: number add: (num: number) => void}// ReturnType获取函数返回类型...缺点:过于自由:Mobx提供的约定及模版代码很少,这导致开发代码编写很自由,如果不做一些约定,比较容易导致团队代码风格统一,团队建议启用严格模式!...return result}触发依赖Observable(被观察者,状态)修改后,会调用它的set方法,然后再依次执行该Observable之前收集的依赖函数,触发rerender

3.5K00

问:你是如何进行react状态管理方案选择的?_2023-03-13

缺点两种hooks管理方式都有一个很明显的缺点,会产生大量的无效rerender,如上例中的Count和Name组件,当state.count改变后,Name组件也会rerender,尽管他没有使用到state.count...Redux状态管理使用方法:1.引入reduxyarn add redux react-redux @types/react-redux redux-thunk2.新建reducer在src/store...action.types'// 声明参数接口interface Props { count: number add: (num: number) => void}// ReturnType获取函数返回类型...缺点:过于自由:Mobx提供的约定及模版代码很少,这导致开发代码编写很自由,如果不做一些约定,比较容易导致团队代码风格统一,团队建议启用严格模式!...return result}触发依赖Observable(被观察者,状态)修改后,会调用它的set方法,然后再依次执行该Observable之前收集的依赖函数,触发rerender

2.3K30

如何进行react状态管理方案选择

缺点两种hooks管理方式都有一个很明显的缺点,会产生大量的无效rerender,如上例中的Count和Name组件,当state.count改变后,Name组件也会rerender,尽管他没有使用到state.count...Redux状态管理使用方法:1.引入reduxyarn add redux react-redux @types/react-redux redux-thunk2.新建reducer在src/store...action.types'// 声明参数接口interface Props { count: number add: (num: number) => void}// ReturnType获取函数返回类型...缺点:过于自由:Mobx提供的约定及模版代码很少,这导致开发代码编写很自由,如果不做一些约定,比较容易导致团队代码风格统一,团队建议启用严格模式!...return result}触发依赖Observable(被观察者,状态)修改后,会调用它的set方法,然后再依次执行该Observable之前收集的依赖函数,触发rerender

3.3K30

前端一面必会react面试题(附答案)

缺点两种hooks管理方式都有一个很明显的缺点,会产生大量的无效rerender,如上例中的Count和Name组件,当state.count改变后,Name组件也会rerender,尽管他没有使用到state.count...Redux状态管理使用方法:1.引入reduxyarn add redux react-redux @types/react-redux redux-thunk2.新建reducer在src/store...action.types'// 声明参数接口interface Props { count: number add: (num: number) => void}// ReturnType获取函数返回类型...缺点:过于自由:Mobx提供的约定及模版代码很少,这导致开发代码编写很自由,如果不做一些约定,比较容易导致团队代码风格统一,团队建议启用严格模式!...return result}触发依赖Observable(被观察者,状态)修改后,会调用它的set方法,然后再依次执行该Observable之前收集的依赖函数,触发rerender

2.5K20

一些前端框架的比较(下)——Ember.js 和 React

另外,在选型的时候评估一个技术需要把明确依赖的插件扩展等等一股脑统统考虑进去,这些加起来就很大了。...层面考虑了,和别的代码没有什么区别;再一个,以往间接的往模板传参和需要独立上下文(栈)来实现的状态保存,都变得直接而且简单。...对于 view 的更新难免会有大量的 rerender,但是是否一点点修改要把整个 component 全部渲染一遍?...当然有一些 Flux 的特性它没有采纳,比如 “dispatcher”,因为有了纯函数式的 reduce 方法来计算状态;再比如 Redux 是私自默认你只会使用不可变对象,不会擅自改变其中的状态的。...,把这些状态和状态的变化变成再编程过程中可以预测的: 只有一个数据源(store); 状态是只读的(数据流动的单向性:只能通过 action 去改变); 只能通过纯函数(reducer,产生任何外部影响

2.1K20

38. 精读《dob - 框架使用》

大家吐槽归吐槽,最终活还是得干,Redux 还是得用,就算分析出 js 天生不适合函数式,也依然一条路走到黑,因为谁也不知道未来会如何发展,redux 生态虽然用得繁琐,但普适性强,忍一忍,生活也能继续过...约定是活的,遵守也没事,约束是死的,遵守就无法运行。约束大部分由框架提供,比如开启严格模式后,禁止在 Action 外修改变量。...每个组件都要 Connect 吗 对于 Mvvm 思想的库,Connect 概念不仅仅在于注入数据(与 redux 不同),还会监听数据的变化触发 rerender。...异步与副作用 Redux 自然而然用 action 隔离了副作用与异步,那在只有 action 的 Mvvm 开发模式中,异步需要如何隔离?...,正在考虑实现一个自动请求库,如果有好的建议,也非常欢迎一起交流。

42910

前端单测,我们应该测什么?

正片开始 知道如何做测试很好,也很重要的。我之前就教过很多人测试的基础知识、如何配置工具、如何针对不用情况写好测试,等等。但是知道如何测试只是成功的一半,知道要测什么才是更重要的另一半。...则返回空数组 传入非 falsy 且不是数组时,返回一个数组,其中包含的输入 现在再来把测试用例都加上,然后再来看覆盖情况: test('传入 falsy ,则返回空数组', () => {...test(`传入非 falsy 也不是数组时,返回一个数组,其中包含的输入`, () => { expect(arrayify('Leopard')).toEqual(['Leopard'])...,返回数组 输入非数组,返回数组,其中包含输入内容 如果我们来思考一下真实的使用用例,会发现少了一种 Case: 输入 Falsy ,返回空数组 如果用户直接用 arrayify(),那么这样的测试用例就不能很好地给足我们代码的信心了...然而,我们的测试依旧是可以通过的,但所有依赖 “输入 falsy ” 的这个 Case 的代码就都挂了。 要对使用用例做测试,不是代码 如何应用到 React 代码的测试?

67620

从 Recoil 到 Jotai (上)

并且将其作为生产应用来使用; 其实抛开上述现状来讲,内部项目在生产使用 Recoil 并无什么大的问题,偶现场景的内存泄漏,基本属于极端场景,但是基于长远发展的方向而言,库的选型上可能略有不妥; 但是的不吐槽...原子哲学 以 jotai 为例,底层还是依赖了 React Provider (这里解释包含 provider less mode)作为原子范围的隔离; 下面是 GC 原理,区别于 Recoil (String...pendingMap = new Map< AnyAtom, AtomState /* prevAtomState */ | undefined >() // .... } 那么最终的原子哲学是如何工作的呢...图片来自于:https://blog.bitsrc.io/redux-free-state-management-with-jotai-2c8f34a6a4a 浅看一下 useAtomValue 的源码..., delay) return } rerender() }) rerender() return unsub }, [store,

7410

2021前端react面试题汇总

(衍生)∶ 从应用状态中派生而出,且没有任何其他影响的数据 对比总结: redux将数据保存在单一的store中,mobx将数据保存在分散的多个store中 redux使用plain object保存数据...尽管建议在app中使用context,但是独有组件而言,由于影响范围小于app,如果可以做到高内聚,破坏组件树之间的依赖关系,可以考虑使用context 对于组件之间的数据通信或者状态管理,有效使用...setState方法更新state,就会触发视图的重新渲染,完成表单组件的更新 受控组件缺陷: 表单元素的都是由React组件进行管理,当有多个输入框,或者多个这种组件时,如果想同时获取到全部的就必须每个都要编写事件处理函数...在非受控组件中,可以使用一个ref来从DOM获得表单不是为每个状态更新编写一个事件处理程序。...DOM如果是现用现取的称为非受控组件,通过setState将输入维护到了state中,需要时再从state中取出,这里的数据就受到了state的控制,称为受控组件。

2.2K00

2021前端react面试题汇总

)和动作(action) Derivation(衍生)∶ 从应用状态中派生而出,且没有任何其他影响的数据 对比总结: redux将数据保存在单一的store中,mobx将数据保存在分散的多个store中...redux使用plain object保存数据,需要手动处理变化后的操作;mobx适用observable保存数据,数据变化后自动处理响应的操作 redux使用不可变状态,这意味着状态是只读的,不能直接去修改它...尽管建议在app中使用context,但是独有组件而言,由于影响范围小于app,如果可以做到高内聚,破坏组件树之间的依赖关系,可以考虑使用context 对于组件之间的数据通信或者状态管理,有效使用...在非受控组件中,可以使用一个ref来从DOM获得表单不是为每个状态更新编写一个事件处理程序。...DOM如果是现用现取的称为非受控组件,通过setState将输入维护到了state中,需要时再从state中取出,这里的数据就受到了state的控制,称为受控组件。

1.9K20

2022前端社招React面试题 附答案

)和动作(action) Derivation(衍生)∶ 从应用状态中派生而出,且没有任何其他影响的数据 对比总结: redux将数据保存在单一的store中,mobx将数据保存在分散的多个store中...redux使用plain object保存数据,需要手动处理变化后的操作;mobx适用observable保存数据,数据变化后自动处理响应的操作 redux使用不可变状态,这意味着状态是只读的,不能直接去修改它...尽管建议在app中使用context,但是独有组件而言,由于影响范围小于app,如果可以做到高内聚,破坏组件树之间的依赖关系,可以考虑使用context 对于组件之间的数据通信或者状态管理,有效使用...在非受控组件中,可以使用一个ref来从DOM获得表单不是为每个状态更新编写一个事件处理程序。...DOM如果是现用现取的称为非受控组件,通过setState将输入维护到了state中,需要时再从state中取出,这里的数据就受到了state的控制,称为受控组件。

1.7K40

35. 精读《dob - 框架实现》

对数据流的研究,大多集中于 “优化在某些框架的用法” “基于场景改良” “优化全局与局部数据流间关系” “函数式与面向对象之争” “对输入抽象” “数据格式转换” 这几方面。...如何结合 React observe 如何到 render observe 可以类比到 React 的 render,它们都具有相同的特征:是同步函数,同时 observe 的运行机制也符合了 render...要实现结合,用到两个小技巧:聚合生命周期、替换 render 函数,用图才能解释清楚: 以上是简化版,正式版本使用 reaction 实现,可以更清晰的区分依赖收集与 rerender 阶段。...如何避免在 view 中随意修改变量 为了使用起来具有更好的可维护性,需要限制依赖追踪的功能,使不能再随意的修改。可见,强大的功能,代表在数据流场景的高可用性,恰当的约束反而会更好。...Debug 功能如何解耦 解耦还能方便许多功能拓展,比如支持 redux。 我得答案是事件。通过精心定义的一系列事件,制造出一个具有生命周期的工具库!

54610
领券