首页
学习
活动
专区
圈层
工具
发布

第七篇:React-Hooks 设计动机与工作模式(下)

当我们在函数组件中调用 React.useState 的时候,实际上是给这个组件关联了一个状态,注意,是“一个状态”而不是“一批状态”,这一点是相对于类组件中的 state 来说的。...,比如操作 DOM、订阅事件、调用外部 API 获取数据等。...首先需要说明,数组中的变量一般都是来源于组件本身的数据props 或者 state。...这里从 props 里获取某个数据,根据这个数据更新 DOM // 3. 这里设置一个订阅 // 4....而在 Hooks 的帮助下,我们完全可以把这些繁杂的操作按照逻辑上的关联拆分进不同的函数组件里:我们可以有专门管理订阅的函数组件、专门处理 DOM 的函数组件、专门获取数据的函数组件等。

1.1K10

useEffect 的阴暗面

React 的 useEffect 钩子可以说是函数组件中执行副作用的瑞士军刀,既能获取数据、设置订阅,还能和浏览器 DOM 打交道。...常见使用场景 在实际开发中,useEffect 最常见的几个用途包括: • 数据获取:组件挂载时从 API 拉取数据,或者当某个参数变化时重新拉取数据。...这就像离开房间时要关灯、关空调,不能浪费资源 下面是一个典型的数据获取示例: function MyComponent() { // 使用 useState 创建状态,存储从 API 获取的数据 const...这通常是因为依赖数组包含了不必要的依赖,或者副作用中的操作太昂贵。 典型场景:依赖数组中包含了一个对象或数组,每次组件重新渲染时,即使对象内容没变,引用变了也会触发 useEffect。...; } 解决方案:使用 useMemo 或 useCallback 来稳定依赖项的引用,或者将依赖项细化到具体的值而不是整个对象。

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

    React 中必会的 10 个概念

    在 React 中,我们通常必须从服务器获取数据并将其显示给我们的用户。为了检索此数据,我们经常使用 Promise 链式调用。 ?...这意味着,如果 null 为其中一个参数传递值,则不会采用该函数定义的默认值。因此,请确保使用 undefined而不是 null 当您希望使用默认值时使用。...解构 在 React 中非常经常使用解构。这是一个可以与对象以及数组一起使用的概念。分解是简化 JavaScript 代码的一种简便方法,因为它使我们可以在一行中将数据从对象或数组中拉出。...数组解构与对象解构相似,不同之处在于我们按照数据在数组中出现的顺序将数据一一拉出。 让我们直接来看看它在 React 应用程序中的用法。 ? 三元运算符 三元运算符用作 if 语句的简洁方式。...我将 async / await 包含在此列表中是因为在每个前端项目中,我们正在做很多需要异步代码的工作。一个常见的例子是当我们想通过 API 调用获取数据时。

    8.7K30

    年前端react面试打怪升级之路

    而不是为每个状态更新编写一个事件处理程序。React官方的解释:要编写一个非受控组件,而不是为每个状态更新都编写数据处理函数,你可以使用 ref来从 DOM 节点中获取表单数据。...如果是现用现取的称为非受控组件,而通过setState将输入的值维护到了state中,需要时再从state中取出,这里的数据就受到了state的控制,称为受控组件。...通过对比,从形态上可以对两种组件做区分,它们之间的区别如下:类组件需要继承 class,函数组件不需要;类组件可以访问生命周期方法,函数组件不能;类组件中可以获取到实例化后的 this,并基于这个 this...这就意味着从原则上来讲,React 的数据应该总是紧紧地和渲染绑定在一起的,而类组件做不到这一点。函数组件就真正地将数据和渲染绑定到了一起。...这就给函数组件的使用带来了非常多的局限性,导致我们并不能使用函数这种形式,写出一个真正的全功能的组件。而React-Hooks 的出现,就是为了帮助函数组件补齐这些(相对于类组件来说)缺失的能力。

    3.1K10

    React Hooks 设计动机与工作模式

    这就意味着从原则上来讲,React 的数据应该总是紧紧地和渲染绑定在一起的,而类组件做不到这一点。...从核心 API 看 Hooks 的基本形态 useState():为函数组件引入状态 早期的函数组件相比于类组件,其一大劣势是缺乏定义和维护 state 的能力,而 state(状态)作为 React...当我们在函数组件中调用 React.useState 的时候,实际上是给这个组件关联了一个状态——注意,是“一个状态”而不是“一批状态”。这一点是相对于类组件中的 state 来说的。...,比如操作 DOM、订阅事件、调用外部 API 获取数据等。...而在 Hooks 的帮助下,我们完全可以把这些繁杂的操作按照逻辑上的关联拆分进不同的函数组件里:我们可以有专门管理订阅的函数组件、专门处理 DOM 的函数组件、专门获取数据的函数组件等。

    1.3K40

    2021高频前端面试题汇总之React篇

    但是对于合成事件来说,有一个事件池专门来管理它们的创建和销毁,当事件需要被使用时,就会从池子中复用对象,事件回调结束后,就会销毁事件对象上的属性,从而便于下次复用事件对象。 2....HOC 自身不是 React API 的一部分,它是一种基于 React 的组合特性而形成的设计模式。具体而言,高阶组件是参数为组件,返回值为新组件的函数。...HOC 自身不是 React API 的一部分,它是一种基于 React 的组合特性而形成的设计模式。...通过对比,从形态上可以对两种组件做区分,它们之间的区别如下: 类组件需要继承 class,函数组件不需要; 类组件可以访问生命周期方法,函数组件不能; 类组件中可以获取到实例化后的 this,并基于这个...这就意味着从原则上来讲,React 的数据应该总是紧紧地和渲染绑定在一起的,而类组件做不到这一点。函数组件就真正地将数据和渲染绑定到了一起。

    2.6K00

    【译】开始学习React - 概览和演示教程

    JSX实际上更接近JavaScript,而不是HTML,因此在编写时需要注意一些关键区别。 因为class被作为JavaScript中的保留关键字,className用来替代class添加CSS类。...# src/Table.js const TableBody = () => { return } 然后,将所有数据移到对象数组中,就像我们引入基于JSON的API一样。...state状态 现在,我们将字符数据存在变量的数组中,并将其作为props传递。这是一个很好的开始,但是请想象下,如果我们希望能够从数组中删除一个项目。...你可以将状态state视为无需保存或修改,而不必添加到数据库中的任何数据 - 例如,在确认购买之前,在购物车中添加和删除商品。 首先,我们将创建一个状态state对象。...拉取API数据 React的一种非常常见的用法是从API提取数据。

    13.1K20

    你要的 React 面试知识点,都在这了

    什么是错误边界 什么是 Fragments 什么是传送门(Portals) 什么是 Context 什么是 Hooks 如何提高性能 如何在重新加载页面时保留数据 如何从React中调用API 总结...所有这些函数都不改变现有的数据,而是返回新的数组或对象。...React在开发特性时给了开发人员很大的自由,例如,调用API的方式、路由等等。我们不需要包括路由器库,除非我们需要它在我们的项目。...有一种称为非受控组件的方法可以通过使用Ref来处理表单数据。在非受控组件中,Ref用于直接从DOM访问表单值,而不是事件处理程序。 我们使用Ref构建了相同的表单,而不是使用React状态。...如何在重新加载页面时保留数据 单页应用程序首先在DOM中加载index.html,然后在用户浏览页面时加载内容,或者从同一index.html中的后端API获取任何数据。

    21.7K20

    你需要的react面试高频考察点总结

    WrappedComponent { render(){ return super.render(); } }}为什么 useState 要使用数组而不是对象...useState 的用法:const [count, setCount] = useState(0)可以看到 useState 返回的是一个数组,那么为什么是返回数组而不是返回对象呢?...总结:useState 返回的是 array 而不是 object 的原因就是为了降低使用的复杂度,返回数组的话可以直接根据顺序解构,而返回对象的话要想使用多次就需要定义别名了。...Keys 是 React 用于追踪哪些列表中元素被修改、被添加或者被移除的辅助标识。在 React 中渲染集合时,向每个重复的元素添加关键字对于帮助React跟踪元素与数据之间的关联非常重要。...这样的好处是,可以将数据请求放在这里进行执行,需要传的参数则从componentWillReceiveProps(nextProps)中获取。而不必将所有的请求都放在父组件中。

    4.5K30

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

    HOC 自身不是 React API 的一部分,它是一种基于 React 的组合特性而形成的设计模式。具体而言,高阶组件是参数为组件,返回值为新组件的函数。...HOC 自身不是 React API 的一部分,它是一种基于 React 的组合特性而形成的设计模式。简言之,HOC是一种组件的设计模式,HOC接受一个组件和额外的参数(如果需要),返回一个新的组件。...这样的好处是,可以将数据请求放在这里进行执行,需要传的参数则从componentWillReceiveProps(nextProps)中获取。而不必将所有的请求都放在父组件中。...其他方式在列表需要频繁变动时,使用唯一 id 作为 key,而不是数组下标。必要时通过改变 CSS 样式隐藏显示组件,而不是通过条件判断显示隐藏组件。...可以将数据请求放在这里进行执行,需要传的参数则从componentWillReceiveProps(nextProps)中获取。而不必将所有的请求都放在父组件中。

    1.2K60

    react组件深度解读

    例如,组件在浏览器中渲染时可能会更改网页的标题,或者可能会将浏览器视图滚动到某个位置。最重要的是,React 组件可以拥有一个私有状态来保存在组件生命周期内可能发生变化的数据。...在创建 React 组件时应该牢记这一点。我们不是在写 HTML,而实在使用 JS 扩展来创建 React 元素(实际上是 JS 对象)的函数调用。...在 React 中,React 元素接收的属性列表称为 props 。使用函数组件时,你不必将包含属性列表的对象命名为 props,但这是标准做法。...当 todos 数组发生更改时(我们需要使用模板语言更新 DOM 中呈现的内容),我们必须重新呈现该模板或计算DOM树中我们需要反映 todos 数组中更改的位置。...对于函数组件,此元素是函数返回的对象,对于类组件,元素是组件的 render 方法返回的对象。React 元素不是你在浏览器中看到的,它们只是内存中的对象,你无法改变它们。

    7.2K20

    react组件用法深度分析

    例如,组件在浏览器中渲染时可能会更改网页的标题,或者可能会将浏览器视图滚动到某个位置。最重要的是,React 组件可以拥有一个私有状态来保存在组件生命周期内可能发生变化的数据。...在创建 React 组件时应该牢记这一点。我们不是在写 HTML,而实在使用 JS 扩展来创建 React 元素(实际上是 JS 对象)的函数调用。...在 React 中,React 元素接收的属性列表称为 props 。使用函数组件时,你不必将包含属性列表的对象命名为 props,但这是标准做法。...当 todos 数组发生更改时(我们需要使用模板语言更新 DOM 中呈现的内容),我们必须重新呈现该模板或计算DOM树中我们需要反映 todos 数组中更改的位置。...对于函数组件,此元素是函数返回的对象,对于类组件,元素是组件的 render 方法返回的对象。React 元素不是你在浏览器中看到的,它们只是内存中的对象,你无法改变它们。

    7.1K20

    2022前端必会的面试题(附答案)

    通过对比,从形态上可以对两种组件做区分,它们之间的区别如下:类组件需要继承 class,函数组件不需要;类组件可以访问生命周期方法,函数组件不能;类组件中可以获取到实例化后的 this,并基于这个 this...这就意味着从原则上来讲,React 的数据应该总是紧紧地和渲染绑定在一起的,而类组件做不到这一点。函数组件就真正地将数据和渲染绑定到了一起。...这就给函数组件的使用带来了非常多的局限性,导致我们并不能使用函数这种形式,写出一个真正的全功能的组件。而React-Hooks 的出现,就是为了帮助函数组件补齐这些(相对于类组件来说)缺失的能力。...为什么 useState 要使用数组而不是对象useState 的用法:const [count, setCount] = useState(0)复制代码可以看到 useState 返回的是一个数组,那么为什么是返回数组而不是返回对象呢...总结:useState 返回的是 array 而不是 object 的原因就是为了降低使用的复杂度,返回数组的话可以直接根据顺序解构,而返回对象的话要想使用多次就需要定义别名了。

    2.7K40

    前端高频react面试题

    但是对于合成事件来说,有一个事件池专门来管理它们的创建和销毁,当事件需要被使用时,就会从池子中复用对象,事件回调结束后,就会销毁事件对象上的属性,从而便于下次复用事件对象。...这样的好处是,可以将数据请求放在这里进行执行,需要传的参数则从componentWillReceiveProps(nextProps)中获取。而不必将所有的请求都放在父组件中。...这个问题就设计到了数据持久化, 主要的实现方式有以下几种:Redux: 将页面的数据存储在redux中,在重新加载页面时,获取Redux中的数据;data.js: 使用webpack构建的项目,可以建一个文件...在使用 React Router时,如何获取当前页面的路由或浏览器中地址栏中的地址?...但在大多数情况下,Hooks 就足够了,可以帮助减少树中的嵌套。

    4.6K20

    前端一面react面试题总结

    但是对于合成事件来说,有一个事件池专门来管理它们的创建和销毁,当事件需要被使用时,就会从池子中复用对象,事件回调结束后,就会销毁事件对象上的属性,从而便于下次复用事件对象。...HOC 自身不是 React API 的一部分,它是一种基于 React 的组合特性而形成的设计模式。具体而言,高阶组件是参数为组件,返回值为新组件的函数。...HOC 自身不是 React API 的一部分,它是一种基于 React 的组合特性而形成的设计模式。简言之,HOC是一种组件的设计模式,HOC接受一个组件和额外的参数(如果需要),返回一个新的组件。...(2)使用useState时候,使用push,pop,splice等直接更改数组对象的坑使用push直接更改数组无法获取到新值,应该采用析构方式,但是在class里面不会有这个问题。...不同点:它们在开发时的心智模型上却存在巨大的差异。类组件是基于面向对象编程的,它主打的是继承、生命周期等核心概念;而函数组件内核是函数式编程,主打的是 immutable、没有副作用、引用透明等特点。

    3.7K30

    react常见面试题

    通过对比,从形态上可以对两种组件做区分,它们之间的区别如下:类组件需要继承 class,函数组件不需要;类组件可以访问生命周期方法,函数组件不能;类组件中可以获取到实例化后的 this,并基于这个 this...这就意味着从原则上来讲,React 的数据应该总是紧紧地和渲染绑定在一起的,而类组件做不到这一点。函数组件就真正地将数据和渲染绑定到了一起。...这就给函数组件的使用带来了非常多的局限性,导致我们并不能使用函数这种形式,写出一个真正的全功能的组件。而React-Hooks 的出现,就是为了帮助函数组件补齐这些(相对于类组件来说)缺失的能力。...,而不是一个数组。...而 React 的工作方式则不同。包含表单的组件将跟踪其状态中的输入值,并在每次回调函数(例如onChange)触发时重新渲染组件,因为状态被更新。

    2.1K10

    滴滴前端二面常考react面试题(持续更新中)_2023-03-01

    useState 的用法: const [count, setCount] = useState(0) 可以看到 useState 返回的是一个数组,那么为什么是返回数组而不是返回对象呢?...总结:useState 返回的是 array 而不是 object 的原因就是为了降低使用的复杂度,返回数组的话可以直接根据顺序解构,而返回对象的话要想使用多次就需要定义别名了。...HOC 自身不是 React API 的一部分,它是一种基于 React 的组合特性而形成的设计模式。...在React中页面重新加载时怎样保留数据?...这个问题就设计到了数据持久化, 主要的实现方式有以下几种: Redux: 将页面的数据存储在redux中,在重新加载页面时,获取Redux中的数据; data.js: 使用webpack构建的项目,可以建一个文件

    5.3K10

    【react】203-十个案例学会 React Hooks

    Hooks 出现之前,UI 组件我们可以使用函数,无状态组件来展示 UI,而对于容器组件,函数组件就显得无能为力,我们依赖于类组件来获取数据,处理数据,并向下传递参数给 UI 组件进行渲染。...useEffect 处理副作用 函数组件能保存状态,但是对于异步请求,副作用的操作还是无能为力,所以 React 提供了 useEffect 来帮助开发者处理函数组件的副作用,在介绍新 API 之前,我们先来看看类组件是怎么做的...组件每隔一秒更新组件状态,并且每次触发更新都会触发 document.title 的更新(副作用),而在组件卸载时修改 document.title(类似于清除) 从例子中可以看到,一些重复的功能开发者需要在...context 而不是 consumer,返回值即是想要透传的数据了。...我们还可以通过 this 这个对象来存储函数,而在函数组件中没办法进行挂载了。

    3.6K20
    领券