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

【译】3条简单的React状态管理规则

React组件内部的状态是在渲染之间保持不变的封装数据。useState()是React钩子,负责管理功能组件内部的状态。 我喜欢useState()确实使状态处理变得非常容易。...将复杂的状态操作保留在组件中是否有意义? 创建React Hook是为了将组件从复杂的状态管理和副作用中隔离出来。...在addNewProduct()中,使用一个Set对象来保持产品名称的唯一性。组件应该关注这个实现细节吗?。 最好将复杂的状态设置器逻辑隔离到自定义Hook中。...调度删除操作会将产品名称名称状态中删除。 4.总结 状态变量应该负责一个关注点。 如果状态具有复杂的更新逻辑,则将该逻辑从组件中提取到自定义Hook中。...该组件不应被状态更新的细节所困扰:它们应该是自定义Hook reducer 的一部分。 严格遵循这3个简单规则将使您的状态逻辑易于理解、维护和测试。

2.1K40

3 个 React 状态管理的规则

React 组件内部的状态是在渲染过程之间保持不变的封装数据。useState() 是 React hook,负责管理功能组件内部的状态。...考虑一个管理产品列表的组件。用户可以添加新的产品名称。约束是产品名称必须是唯一的。...names 是保存产品名称状态变量,而 dispatch 是使用操作对象调用的函数。...remove 操作将产品名称名称状态中删除。 有趣的是,reducer 是命令模式的特例。 总结 状态变量应只关注一个点。 如果状态具有复杂的更新逻辑,则将该逻辑从组件提取到自定义 hook 中。...组件不应被状态更新的细节所困扰:它们应该是自定义 hook 化简器的一部分。 这 3 个简单的规则能够使你的状态逻辑易于理解、维护和测试。

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

Hooks:尽享React特性 ,重塑开发体验

从概念上讲,React 组件总是更接近于函数,不需要学习复杂的功能响应式编程技术。 Hooks 是否可以完全取代 render props 和 Hoc 组件?...1 答:不能,例如虚拟滚动组件需要具有 renderItem prop,以及可视化容器组件可能具有自己的DOM结构。 ✔️ Hooks 让我们根据代码所做的,而不是生命周期方法名称来分割代码。...Hooks 使用规则(调用位置有限制) ✅ 在函数组件的顶层调用 Hooks ✅ 在 React 的函数组件自定义Hooks中调用 Hook 下述以 useState(React 内置钩子) 为例...const [count, setCount] = useState(0); 数组结构语法允许我们为状态变量赋予不同的名称。这些名称不是 useState API 的一部分。...其他 Hook 使用 useDebugValue 自定义 React 开发者工具为自定义 Hook 添加的标签。 使用 useId 将唯一的 ID 与组件相关联,其通常与可访问性 API 一起使用。

4900

使用 TypeScript 编写 React.js 应用 | 笔记

隐藏和显示组件组件添加状态 添加状态变量 projectBeingEdited 以保存当前正在编辑的项目。 并更新 handleEdit 以设置 projectBeingEdited 变量。...将状态 loading 设置为 true 调用 API: projectAPI.get(1) 如果成功,将返回的 data 设置为组件 projects 状态变量,并将 loading 状态变量设置为...单击任何项目卡片中的名称描述 验证你是否被带到 /projects/1 路由,并且 ProjectPage 显示 ProjectDetail 组件 image-20230623131154637...npm npm i react-test-renderer --save-dev npm i @types/react-test-renderer --save-dev 创建您的第一个快照测试 为组件添加快照测试...: Install · Prettier 项目级 prettier 项目级安装 prettier yarn add --dev --exact prettier 创建一个空的配置文件, 以便让编辑器和其它工具知道你使用

76990

深入了解 useMemo 和 useCallback

我们直接告诉 React 需要更改哪些 DOM 节点。相反,我们根据当前状态告诉React UI应该是什么样子。...而 useMemo 和 useCallback 是用来帮助我们优化重渲染的工具。他们通过两种方式做到这一点: 减少在给定渲染中需要完成的工作量。 减少组件需要重新呈现的次数。...PurePrimeCalculator 只有在接收到新数据内部状态发生变化时才会重新呈现。这就是所谓的纯组件。...然而,每当用户更改其名称时,Boxes 也会重新呈现。 为什么我们的 React.memo() 没有保护我们?盒子组件只有1个prop,盒子,它看起来好像我们给它在每次渲染完全相同的数据。...return ( ); } 当名称状态改变时,我们的 App 组件将重新呈现,这将重新运行所有的代码。

8.8K30

沉寂 600 多天后,React 憋了个大招

此外,React 团队还介绍了下一个大版本 React 19 的特性,其中包括 Actions(正式名称为 Server Actions)、资产加载和 Web 组件支持。...React Compiler 通过引入优化编译器解决了状态变量时过度重新渲染的问题。...通过支持异步函数,在转换中引入 async/awat 可以显示待处理的 UI,并利用 isPending 状态在异步请求(例如数据获取)期间发出正在进行的处理信号。 3....提前更新 React 技能与工具。 关注关于稳定性和候选版本的公告。 可能发生重大变化的关键领域,包括错误边界、生命周期方法 API,以及从渲染属性到 hooks 的各类变更。.../dev.to/gbengacode/react-19-is-here-oha https://daily.dev/blog/react-19-everything-you-need-to-know-in-one-place

15510

如何在受控表单组件上使用 React Hooks

Hooks 允许你访问函数组件中的状态和生命周期方法。 如果前面这句话对你来说很陌生,那么你应该在这里更新关于 React 的记忆。...React 团队说,它将帮助你编写没有有状态组件包袱的干净的代码。 在使用 Hooks 实现了一个准系统表单之后,我同意了他们的观点。...因为这是一个函数组件,所以我们没有 setState 来帮助我们修改状态变量的值。 我们只有 setFirstName,它的唯一目的就是在每次调用它时更新 firstName。...然而,有一个约定,在我们要修改的状态变量名称之前附加‘set’。 现在我们知道了如何在函数组件中创建状态变量以及如何更新它。 下面让我们继续解释代码的其余部分。...在第一个输入标记中,我们将其值设置为在组件顶部声明的状态变量。 至于 onChange 处理程序,我们将它设置为一个箭头函数,为我们更新状态变量的函数。

59220

前端框架「React」 VS 「Svelte」

start 你会发现 Svelte 的命令运行快得多,因为你不是真正在运行一个工具,而是克隆一个项目模板。...同样的,React 创建了另一个状态变量 color 初始值为 #000000 以及名为 setColor() 的更新函数。从这点来看,Svelte 的状态初始化方法要简单易懂得多。...现在我们可以开始编写 Heading 组件了。 「编写 Heading 组件」 Heading 组件显示这个应用的标题以及点击计数器。...这行代码告诉 Svelte 说,该组件将接收一个名为 count 的属性。 这样就可以在 Heading 组件的 HTML 模板中直接显示 count 这个属性。...当然了,也可以定义全局样式,具体请阅读 global CSS 这篇文档:https://svelte.dev/docs#style。 「React」 在 React 中可以有很多种方法给组件添加样式。

3.5K30

React vs Svelte

你会发现 Svelte 的命令运行快得多,因为你不是真正在运行一个工具,而是克隆一个项目模板。...同样的,React 创建了另一个状态变量 color 初始值为 #000000 以及名为 setColor() 的更新函数。从这点来看,Svelte 的状态初始化方法要简单易懂得多。...现在我们可以开始编写 Heading 组件了。 「编写 Heading 组件」 Heading 组件显示这个应用的标题以及点击计数器。...这行代码告诉 Svelte 说,该组件将接收一个名为 count 的属性。 这样就可以在 Heading 组件的 HTML 模板中直接显示 count 这个属性。...当然了,也可以定义全局样式,具体请阅读 global CSS 这篇文档:https://svelte.dev/docs#style。 「React」 在 React 中可以有很多种方法给组件添加样式。

3K30

前端框架 React 和 Svelte 的基础比较

Svelte 的命令运行快得多,因为你不是真正在运行一个工具,而是克隆一个项目模板。...同样的,React 创建了另一个状态变量 color 初始值为 #000000 以及名为 setColor() 的更新函数。从这点来看,Svelte 的状态初始化方法要简单易懂得多。...现在我们可以开始编写 Heading 组件了。 编写 Heading 组件 Heading 组件显示这个应用的标题以及点击计数器。...这行代码告诉 Svelte 说,该组件将接收一个名为 count 的属性。 这样就可以在 Heading 组件的 HTML 模板中直接显示 count 这个属性。...当然了,也可以定义全局样式,具体请阅读 global CSS 这篇文档:https://svelte.dev/docs#style。 ReactReact 中可以有很多种方法给组件添加样式。

2.1K50

React 基础案例 | 可折叠的问题列表和按分类展示的美食菜谱(三)

首先通过脚手架创建项目 然后创建基于本地的数据文件用于显示问题列表的数据 创建单条项目的问题组件,用于展示问题,定义折叠事件 创建问题列表组件,加载本地文件数据,渲染单条项目组件 好了基于思路,我们开始动手实践吧...插件,用于显示“+(加号)”和“-(减号)”图标,安装命令如下 npm install react-icons --save 2.4、列表组件 接下来我们继续在 App.js 完善逻辑,引入本地数据文件...首先通过脚手架创建项目 然后设计美食的本地文件的数据结构 接下来新建分类导航组件 Categories,展示分类名称及定义切换菜单的交互事件。...继续新建美食列表组件 Menu,显示对应分类的美食信息 最后在 App.js 页面里, 组装本地文件的数据、分类导航组件、美食列表组件 好了,基于需求的梳理,我们开始动手实践吧!...具体的思路如下: 定义 allCategories 分类数组变量,对本地数据的分类进行去重,显示所有美食的分类 定义 menuItems 美食数据状态变量和 categories 分类数据变量,并分别初始化为所有的美食数据和所有的分类数据

95420

【Web技术】1169- 从 Vuex 学习状态管理

随着 Vue,React 的大力普及之下,前端开发们的工作重心逐渐从操作 DOM 转移到了操作数据,状态变量成为了核心。 状态变量,现在大家似乎更愿意称之为状态。...我们经常词不离口的状态,状态管理,其实这个状态就是指状态变量。下文提到的状态同样也是指状态变量。 有了状态之后,组件也来了。...父组件无法访问到子组件内部的状态,但是子组件可以访问父组件显示传过来的状态(Props),并且根据变化自动响应。 这个特性可以理解为状态被模块化了。...Vue 有 Vuex,React 有 Redux,Mobx,当然还有其他方案。但是它们解决的都是一个问题,就是跨组件状态共享的问题。...[模块名称] 这种方式去访问,触发 mutation 则与全局模块一样,没有区别。 action 与 mutation 原理一致,细说。

95810

UpdateAttribute

描述 该处理器使用属性表达式语言更新流文件的属性,并且/或则基于正则表达式删除属性 属性配置 在下面的列表中,必需属性的名称以粗体显示。...只有当状态包含变量的值时,才会在@OnScheduled方法中使用。如果是有状态运行,这是必需配置的,但是如果需要,这可以是空的。...只有当状态包含变量的值时,才会在@OnScheduled方法中使用。如果是有状态运行,这是必需配置的,但是如果需要,这可以是空的。 动态属性 该处理器允许用户指定属性的名称和值。...,还将值存储为要以递归方式引用的有状态变量。...限制 此组件不受限制。 输入要求 此组件需要传入关系。 系统资源方面的考虑 没有指定。

97410

使用React Hook一步步教你创建一个可排序表格组件

本文不会介绍基本的 React JavaScript 语法,但你不必是 React 方面的专家也能跟上,最终我们的效果如下。 ?...第一步,用 React 创建表格 首先,让我们创建一个表格组件,它将接受一个产品(product)数组,并输出一个非常基本的表,每个产品列出一行。...如果第一个参数的名称在第二个参数的名称之后,我们将返回一个正数,表示应将 b 放在 a 之前。如果两者相等(即名称相同),我们将返回 0 以保留顺序。...我们将重构当前的 sortedField 状态变量,以保留字段名及其排序方向。该状态变量将不包含字符串,而是包含一个带有键(字段名称)和排序方向的对象。...给定相同的输入,如果我们出于某种原因重新渲染组件,它不必对产品进行两次排序。请注意,每当我们的产品发生变化,或者根据变化对字段排序方向进行排序时,我们都希望触发一个新的排序。

1.8K20

6个React Hook最佳实践技巧

基于函数的组件被称为哑(dumb)、瘦(skinny)表示(presentational)组件,因为它们无法访问状态和生命周期函数。...仅从函数组件调用 Hooks 不要从常规 JavaScript 函数中调用 Hooks。仅从函数组件自定义 Hooks 中调用 Hooks。...建议先使用 useState Hook 声明状态变量,然后使用 useEffect Hook 编写订阅,接着编写与组件作业相关的其他函数。.../best-practices-and-tips-for-a-scalable-react-application-db708ae49227 你可以使用 Bit 之类的工具将 Hooks 发布到单个集合中...针对这个方法,唯一要强调的是你不能在类组件中使用 Hooks。所以如果你的项目中还有老式的类组件,就需要将它们转换为函数,或者使用其他可重用逻辑模式(HOC 渲染 Props)。

2.5K30

react 基础操作-语法、特性 、路由配置

# 数据更新渲染页面?react 函数组件避坑 react 函数组件中定义变量 i = 0,页面模板上使用 i 变量,在按钮点击事件函数中修改 i++,但是页面上没有渲染,怎么回事?...如果你想在组件中更新并重新渲染页面上的内容,你应该使用 React 的状态管理。你可以使用 useState 钩子来声明一个状态变量,并使用状态变量的更新函数来更新它。...当状态变量的值发生改变时,组件将会重新渲染并展示最新的值。...这个方法会阻止事件进一步冒泡到父元素其他监听同一事件的子元素上。...import React, { useState } from "react"; function Counter() { // 声明一个名为 count 的状态变量,初始值为 0 const

21620

MySQL8 中文参考(二十八)

如果名称匹配,则插件将检查套接字用户名是否与mysql.user系统表行的authentication_string列中指定的名称匹配。如果找到匹配项,则插件允许连接。...注意 此插件旨在用于测试和开发目的,不适用于生产环境暴露在公共网络上的服务器。 以下表格显示了插件和库文件的名称。文件名后缀可能在您的系统上有所不同。...该组件公开了系统变量,使您能够配置密码策略,并公开了用于组件监视的状态变量。...密码验证组件系统变量 密码验证组件状态变量 密码验证插件选项 密码验证插件系统变量 密码验证插件状态变量 密码验证组件系统变量 如果启用了validate_password组件...因此,其状态变量也已被弃用;预计将被移除。请使用validate_password组件的相应状态变量;请参阅密码验证组件状态变量。使用插件的 MySQL 安装应该过渡到使用组件

7510

solidity语言开发以太坊智能合约中的继承

所有函数调用都是虚函数,这意味着会是调用派生函数最多的函数,除非明确给出了合约名称。当某一个智能合约从多个合约继承时,只在区块链上创建一个智能合约,并将所有基础合约中的代码复制到创建的智能合约中。...这些代码段可通过其工具其Github存储库获得。...重要的是我们希望任何人能够破坏我们的合约,所以我们的Destructible应该继承Ownable。继承是使用智能合约名称后面的is关键字完成的。...对于公共状态变量,会生成自动getter函数(见下文)。 internal:这些函数和状态变量只能在内部访问(即从当前合约从中派生的合约中),而其他情况不使用它。...private:私有函数和状态变量仅对定义它们的智能合约可见,而不是在派生合约中可见。

92530

亲手打造属于你的 React Hooks

自定义 React Hook 是一个必要的工具,它可以让你为 React 应用程序添加特殊的、独特的功能。 在许多情况下,如果你想向应用程序添加特定的特性,您可以简单地安装一个第三方库来解决您的问题。...我们可以显示一个不同的图标,表明复制成功。 import React from "react"; import ClipboardIcon from ".....为此,我们可以使用一个媒体查询(CSS),或者使用一个自定义的React钩子来提供当前页面的大小,并隐藏显示JSX中的链接。 以前,我使用的是一个名为react-use的库中的钩子。...resize", changeWindowSize); }; }, []); return windowSize; } 结果 要使用钩子,我们只需要在需要的地方导入它,调用它,并在想要隐藏显示某些元素的地方使用宽度...钩子可以为我们提供在第三方库不足时修复我们自己问题的工具

10K60
领券