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

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

通过对比,从形态上可以对两种组件做区分,它们之间的区别如下:类组件需要继承 class,函数组件不需要;类组件可以访问生命周期方法,函数组件不能;类组件中可以获取到实例化后的 this,并基于这个 this...这就意味着从原则上来讲,React 的数据应该总是紧紧地和渲染绑定在一起的,而类组件做不到这一点。函数组件就真正地将数据和渲染绑定到了一起。...为什么 useState 要使用数组而不是对象useState 的用法:const [count, setCount] = useState(0)复制代码可以看到 useState 返回的是一个数组,那么为什么是返回数组而不是返回对象呢...返回的是数组,那么使用者可以对数组中的元素命名,代码看起来也比较干净如果 useState 返回的是对象,在解构对象的时候必须要和 useState 内部实现返回的对象同名,想要使用多次的话,必须得设置别名才能使用返回值下面来看看如果...在传统页面的开发模式中,每次需要更新页面时,都要手动操作 DOM 来进行更新。 DOM 操作非常昂贵。在前端开发中,性能消耗最大的就是 DOM 操作,而且这部分代码会让整体项目的代码变得难 以维护。

2.2K40

React 组件优化

使用 useReducer hook useReducer 是 useState 的替代品,它可以更好的管理组件的状态。...state 如果是一个引用类型,比如数组或者对象,当往数组中 push 新的项时,我们必须要克隆一份才行,如果不克隆,react 会认为 state 并没有更新。...// 调用 updateList,draft 是经过深度拷贝后的 state 数组 updateList(draft => { draft.push(msg);...") .max(200, "无效的年龄") }); 上面的汉字内容都是当验证不通过时,提醒用户的信息,这些信息会映射到 ErrorMessage 组件中,然后展示出来。...在 Formik 官网,作者也举例了使用 redux-form 的缺陷: 表单状态本质上是短暂的和局部的,并不需要 redux 对其进行跟踪; 使用 redux 管理状态时,状态更新要派发 action

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

    React Hooks实战:从useState到useContext深度解析

    useState和useContext深度解析React Hooks 彻底改变了React组件的状态管理和功能复用方式,使得函数组件也能拥有类组件的功能。...useState:函数组件的状态管理简介:useState是React中最基础的Hook,它允许我们在函数组件中添加状态。...useState是React提供的一个内置Hook,用于在函数组件中添加局部状态。它接受一个初始值作为参数,返回一个数组,数组的第一个元素是当前状态,第二个元素是一个更新状态的函数。...深入理解useState的工作原理,状态更新的异步性及其对性能的影响。状态更新是异步的,这意味着在同一个事件循环中多次调用 setCount,React只会使用最后一次的值。...useState 不支持复杂对象的浅比较,如果需要基于前一个状态更新状态,可以使用函数形式的 setCount,例如 setCount(prevCount => prevCount + 1)。

    20700

    手写React的Fiber架构,深入理解其原理

    首先需要在更新的时候检测当前节点是不是函数组件,如果是,children的处理逻辑会稍微不一样: // performUnitOfWork里面 // 检测函数组件 function performUnitOfWork...简单版 我们还是从用法入手来实现最简单的功能,我们一般使用useState是这样的: function App(props) { const [count, setCount] = React.useState...为了能支持多个useState,我们的state就不能是一个简单的值了,我们可以考虑把他改成一个数组,多个useState按照调用顺序放进这个数组里面,访问的时候通过下标来访问: let state =...Fiber将整棵树的同步任务拆分成了每个节点可以单独执行的异步执行结构。 Fiber可以从任意一个节点开始遍历,遍历是深度优先遍历,顺序是父 -> 子 -> 兄 -> 父,也就是从上往下,从左往右。...useState是在Fiber节点上添加了一个数组,数组里面的每个值对应了一个useState,useState调用顺序必须和这个数组下标匹配,不然会报错。

    1.7K41

    从小学数学聊前端框架设计

    我的战绩是 0/{x}/{y}; 再加上各种使用户可以操纵自变量的事件,如给p增加onClick: setX(x + 1)}>我的战绩是 0/{x}...使用Hooks的函数组件与Class组件最大的区别是: 从拥有「生命周期的实例」向「自变量、因变量与视图的映射关系」转变 如果接受了这个设定,想想现在主流的学习Hooks的方式(甚至React官网也是如此...刚才聊到,在细粒度框架中,交互流程可以概括为: 用户触发事件 -> 自变量改变 -> 因变量改变 -> 映射到视图变化 就像一个画家在画画,画的每一笔对应一个自变量变化,再最终对应画面变化。 ?...而React的更新机制大体概括为: 用户触发事件 -> 触发更新 -> 虚拟DOM全量对比 -> 将对比结果映射为视图操作 就像一个人拿相机拍一张照片,再拿这张照片和上次拍的照片找不同,最后把不同的地方更新了...当调用this.setState(或useState的setter),并不是画下一笔,而是按下快门。 怎么能从一张新照片中发现自变量呢?所以React只能拿新老照片对比。

    52120

    带你深入了解 useState

    通过类组件和函数组件的渲染之后的数据结构来看,两者之间也没有区别。 为什么 react 16 之后函数组件有状态? 众所周知,react 16 做的最大改动就是 fiber。...从 memoizeState 字段的值看出,函数组件和类组件的 state 存储的数据结构不一样了。类组件是简单的数据对象,而函数组件是单向链表。...scheduleWork 会触发 react 更新,这样组件需要重新渲染。整体的流程和初次挂载的时候基本一致,但是从 mountState 方法体的实现来看,组件渲染是使用 initialState。...在更新的时候,useState 的方法体和初始挂载的方法体不一样,更新的时候时候会忽略 useState 传递的 initState,从节点数据的 baseState 中获取初始数据,并一步步执行 queue...结语 通过解读源码的形式去理解 useState 执行过程,能够加深对 react 函数组件状态更新的理解。不足或者有错的地方,欢迎指出。

    1.8K10

    面试官:如何解决React useEffect钩子带来的无限循环问题

    React的useEffect Hook可以让用户处理应用程序的副作用。例如: 从网络获取数据:应用程序通常在第一次加载时获取并填充数据。...这是我们今天要学习的内容: 是什么导致无限循环以及如何解决它们: 在依赖项数组中不传递依赖项 使用函数作为依赖项 使用数组作为依赖项 使用对象作为依赖项 传递不正确的依赖项 什么导致的无限循环以及如何解决它们...钩子,直到应用程序遇到更新深度错误。...结果: 使用数组作为依赖项 将数组变量传递给依赖项也会运行一个无限循环。考虑下面的代码示例: const [count, setCount] = useState(0); //初始值为0。...,useEffect钩子调用setCount,从而再次更新count 因此,React现在在一个无限循环中运行我们的函数 如何解决这个问题 要摆脱无限循环,只需像这样使用一个空的依赖数组: const

    5.2K20

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

    ,而在函数组件中,由于没有 this 这个黑魔法,React 通过 useState 来帮我们保存组件的状态。...通过传入新状态给函数来改变原本的状态值。值得注意的是 useState 不帮助你处理状态,相较于 setState 非覆盖式更新状态,useState 覆盖式更新状态,需要开发者自己处理逻辑。...(代码如上) 似乎有个 useState 后,函数组件也可以拥有自己的状态了,但仅仅是这样完全不够。...,并且每次触发更新都会触发 document.title 的更新(副作用),而在组件卸载时修改 document.title(类似于清除) 从例子中可以看到,一些重复的功能开发者需要在 componentDidMount...从例子可以看出来,只有在第二个参数数组的值发生变化时,才会触发子组件的更新。

    3.1K20

    【React】946- 一文吃透 React Hooks 原理

    7 为什么两次传入useState的值相同,函数组件不更新? ... ? 如果你认真读完这篇文章,这些问题全会迎刃而解。...我们从引入 hooks开始,以useState为例子,当我们从项目中这么写: import { useState } from 'react' 于是乎我们去找useState,看看它到底是哪路神仙?...再一次新的组件更新过程中,会从current复制一份作为workInProgress,更新完毕后,将当前的workInProgress树赋值给current树。...,如果当前函数组件执行后,当前函数组件的还是处于渲染优先级,说明函数组件又有了新的更新任务,那么循坏执行函数组件。...五 总结 上面我们从函数组件初始化,到函数组件更新渲染,两个维度分解讲解了react-hooks原理,掌握了react-hooks原理和内部运行机制,有助于我们在工作中,更好的使用react-hooks

    2.7K40

    React的State Hook用法详解!

    State Hook 就是指 useState 这个特殊函数,让你不用编写class,就可以使用state特性,换言之就是让 函数组件 拥有 state 特性,对数据进行动态更新。...1、简单实例 在函数组件中,用 useState 实现计数器功能,跟上面class实现一样的功能。...数组里的第一个值 // var setCount = countStateVariable[1]; // 数组里的第二个值 // count 和 setCount 是函数内部的变量和方法...学习 Hook' }]); 3、函数式更新 setCount( c => c +1 ) 这种方式就是函数式更新,确保了 count 更新总是建立在最新的数据上,让你从 count 的管理中解脱出来。...return initialState; }); 5、跳过 state 更新 调用 useState 的更新方法来更新state,如果新 state 数值跟之前是一样的,那么组件会跳过子组件的渲染和

    67520

    【React基础-5】React Hook

    Hook简介 hook说白了其实就是一些react中特殊的函数,只不过这些函数允许我们通过钩子的形式钩入一些react的特性,例如我们想要在函数组件中使用state的话就不用将其转为类组件,直接使用useState...()这个hook函数即可;如果想要在函数组件中使用类似于类组件的生命周期这些函数的话,直接使用useEffect()这个hook函数…… useState Hook useState()这个hook函数允许我们在函数组件中使用...它的使用方法如下: 引入react中的useState Hook; 通过调用useState()声明一个state变量和修改这个变量的方法; 在页面需要的地方渲染这个变量数据,在页面需要更新的地方调用修改变量的方法来更新页面...它的使用方法如下: 从react中引入useEffect Hook; 在函数组件中通过调用useEffect()来执行一个副作用。...其他一些hook 下面是一些在平时开发中使用率较低的hook: 名称 作用 useState 在函数组件中可以使用state。 useEffect 在函数组件中可以使用副作用。

    1K10

    React Hooks笔记:useState、useEffect和useLayoutEffect

    React Hooks Hook 是 React 16.8 的新增特性,可以让你在函数组件中使用 state 以及其他的 React 特性。 从概念上讲,React 组件一直更像是函数。...[0]; // 数组里的第一个值 var setFruit = fruitStateVariable[1]; // 数组里的第二个值 useState 接受一个参数(状态的初始值) 当我们使用 useState...使用 [0] 和 [1] 来访问有点令人困惑,因为它们有特定的含义。这就是我们使用数组解构的原因。...useState 返回一个数组,数组包含两个值 第一个值是当前的 state 第二个值是更新 state 的函数 更新状态的函数有两种写法: 参数为非函数值:直接指定新的状态值,内部用其覆盖原来的状态值...可以使用它来读取 DOM 布局并同步触发重渲染。在浏览器执行绘制之前,useLayoutEffect 内部的更新计划将被同步刷新。

    2.8K30

    React Hooks笔记:useState、useEffect和useLayoutEffect

    React Hooks Hook 是 React 16.8 的新增特性,可以让你在函数组件中使用 state 以及其他的 React 特性。 从概念上讲,React 组件一直更像是函数。...[0]; // 数组里的第一个值 var setFruit = fruitStateVariable[1]; // 数组里的第二个值 useState 接受一个参数(状态的初始值) 当我们使用 useState...使用 [0] 和 [1] 来访问有点令人困惑,因为它们有特定的含义。这就是我们使用数组解构的原因。...useState 返回一个数组,数组包含两个值 第一个值是当前的 state 第二个值是更新 state 的函数 更新状态的函数有两种写法: 参数为非函数值:直接指定新的状态值,内部用其覆盖原来的状态值...可以使用它来读取 DOM 布局并同步触发重渲染。在浏览器执行绘制之前,useLayoutEffect 内部的更新计划将被同步刷新。

    39130

    React Hooks 在 react-refresh 模块热替换(HMR)下的异常行为

    这张 gif 动图展示的是使用 react-refresh 特性的开发体验,可以看出,修改组件代码后,已经填写的用户名和密码保持不变,仅仅只有编辑的部分变更了。...在热更新时为了保持状态,useState 和 useRef 的值不会更新。 在热更新时,为了解决某些问题[3],useEffect、useCallback、useMemo 等会重新执行。...第二个问题 如果你使用了 ahooks[4] 或者 react-use[5] 的 useUpdateEffect,在热更新模式下也会有不符合预期的行为。...以上代码的在正常模式下,useUpdateEffect 是永远不会执行的,因为 deps 是空数组,永远不会变化。...如何解决这些问题 方案一 第一个解决方案是从代码层面解决,也就是要求我们在写代码的时候,时时能想起来 react-refresh 模式下的怪异行为。

    2.4K10

    谈谈 React 5种最流行的状态管理库

    使用 Recoil selectors,你可以根据 state 计算派生属性,例如,可能是已过滤的待办事项数组(在todo app 中)或已发货的订单数组(在电子商务应用程序中): import { selector...('') /* useSelector 允许你检索你想使用的状态,在我们的例子中是notes数组。...Context 实践 要创建和使用 context ,请直接从React导入钩子。下面是它的工作原理: /* 1....redux - 【React】深入理解虚拟dom和diff算法 - 从0实现React 系列(三):Diff算法详解 - 从0实现React 系列(二):组件更新 - 从0实现React 系列(一):React...回复"好友"可加微信,秋风的笔记常年陪伴你的左右。 「点赞、在看、分享」是对作者最大的支持❤️

    2.7K20

    immutability-helper实践与优化

    exam1数组的第三项数据,这时候应该如何实现呢?...setData({ ...data, score: { ...data.score, exam1: [...data.score.exam1], }, }); 总结 为了更新一个数组的某一项的值...,我们尝试了上面的四种方式,其中有两种是成功的,但是只有最后一种方式是比较好的,使用最后一种在更新数据的同时,尽可能的降低了对其他数据引用的破坏,但是我们示例数据只有三层,在代码中我们使用了三次...扩展运算符...immutabilty-helper可以按需更新数据,但是对于层级比较多的数据来说,书写也是很麻烦的,有没有更好的方式去更新数据呢?...,这个字符串是由需要更新数据的路径拼接而成的,数组使用[index]来表示,然后在函数内解析这个字符串,构建需要更新的对象就可以了

    93320

    React Hook实战

    所以我们说在Hook之前的函数组件和类组件最大的区别其实就是状态的有无。...并且,如果你使用React Native进行移动应用开发,那么React Native 从 0.59 版本开始支持 Hook。...useState 会返回一对值:当前状态和一个让你更新它的函数,你可以在事件处理函数中或其他一些地方调用这个函数。...2.1 useState useState让函数组件具有了状态的能力。例如,前面用到的计数器示例就用到了useState。...2.3 useMemo 在传统的函数组件中,当在一个父组件中调用一个子组件的时候,由于父组件的state发生改变会导致父组件更新,而子组件虽然没有发生改变但是也会进行更新,而useMemo就是函数组件为了防止这种不必要的更新而采取的手段

    2.1K00

    React系列-轻松学会Hooks

    为什么使用 开发中我们会经常遇到,当我们一个函数组件想要有自己维护的state的时候,不得已只能转换成class useState 的出现是 :useState 是允许你在 React 函数组件中添加...state 的 Hook 简单的讲就是:可以让你在在函数组件里面使用 class的setState 如何使用 useState接受一个参数,返回了一个数组 // 使用es6解构赋值,useState...在函数组件中 在函数组件中使用Hooks可以达到与类组件等效的效果: 在state中:使用useState或useReducer。state的更新将导致组件的重新渲染。...如何使用 把内联回调函数及依赖项数组作为参数传入 useCallback,它将返回该回调函数的 memoized 版本,该回调函数仅在某个依赖项改变时才会更新。...Hook 的依赖数组中,一般不需要使用useMemo 和 useCallback 实际场景 场景:有一个父组件,其中包含子组件,子组件接收一个函数作为props;通常而言,如果父组件更新了,子组件也会执行更新

    4.4K20

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

    React 16.8 版本引入了 Hooks ,可以在不使用 Class 的情况下使用 React 特性。 Hooks 允许从函数组件 “hook into” React 状态和生命周期特性。...Hooks 允许在不使用类的情况下更多地使用 React 的特性。从概念上讲,React 组件总是更接近于函数,不需要学习复杂的功能或响应式编程技术。...Hooks 使用规则(调用位置有限制) ✅ 在函数组件的顶层调用 Hooks ✅ 在 React 的函数组件或自定义Hooks中调用 Hook 下述以 useState(React 内置钩子) 为例...替代生命周期 constructor: 函数组件不需要 constructor,可以通过 useState 初始化(如果数据复杂,可以传入函数); getDerivedStateFromProps:渲染过程更新...使用 useState 声明可以直接更新的状态变量。 使用 useReducer 在 reducer 函数 中声明带有更新逻辑的 state 变量。

    10500
    领券