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

高频React面试题及详解

setState 的“异步”并不是说内部由异步代码实现,其实本身执行的过程和代码都是同步的,只是合成事件和钩子函数的调用顺序在更新之前,导致在合成事件和钩子函数中没法立马拿到更新后的值,形成了所谓的“异步...”,当然可以通过第二个参数 setState(partialState, callback) 中的callback拿到更新后的结果。...性能优化的手段很多时候是通用的详情见前端性能优化加载篇 React如何进行组件/逻辑复用?...抛开已经被官方弃用的Mixin,组件抽象的技术目前有三种比较主流: 高阶组件: 属性代理 反向继承 渲染属性 react-hooks 组件复用详解见组件复用 mixin、hoc、render props...,更加简洁 解耦: React Hooks可以更方便地把 UI 和状态分离,做到更彻底的解耦 组合: Hooks 中可以引用另外的 Hooks形成新的Hooks,组合变化万千 函数友好: React Hooks

3.4K40

前端一面react面试题总结

两者对⽐:redux将数据保存在单⼀的store中,mobx将数据保存在分散的多个store中redux使⽤plain object保存数据,需要⼿动处理变化后的操作;mobx适⽤observable保存数据...Redux 怎么实现属性传递,介绍下原理react-redux 数据传输∶ view-->action-->reducer-->store-->view。...但是对于合成事件来说,有一个事件池专门来管理它们的创建和销毁,当事件需要被使用时,就会从池子中复用对象,事件回调结束后,就会销毁事件对象上的属性,从而便于下次复用事件对象。...该函数会在装载时,接收到新的 props 或者调用了 setState 和 forceUpdate 时被调用。如当接收到新的属性想修改 state ,就可以使用。...那为什么不要在循环、条件或嵌套函数中调用 Hook 呢?因为 Hooks 的设计是基于数组实现。在调用时按顺序加入数组中,如果使用循环、条件或嵌套函数很有可能导致数组取值错位,执行错误的 Hook。

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

    Redux with Hooks

    前言 React在16.8版本为我们正式带来了Hooks API。什么是Hooks?简而言之,就是对函数式组件的一些辅助,让我们不必写class形式的组件也能使用state和其他一些React特性。...本文并不是Hooks的基础教程,所以建议读者先大致扫过官方文档的3、4节,对Hooks API有一定了解。...使用React-Redux的hooks APIs(推荐) 既然前面几种方案或多或少都有些坑点,那么不妨尝试一下React Redux在v7.1.0版本为我们带来的官方hooks APIs,下面就展示下基本用法...两者的用法相近,但如果你想后者像前者一样返回一个对象的话要特别注意: 由于useSelector内部默认是使用===来判断前后两次selector函数的计算结果是否相同的(如果不相同就会触发组件re-render...此外,使用Hooks自建全局状态管理的方式在小项目中固然可行,然而想用在较大型的、正式的业务中,至少还要花费心思解决性能问题,而这个问题正是React-Redux等工具已经花费不少功夫帮我们解决了的,似乎并没有什么充分的理由要抛弃它们

    4K60

    阿里前端二面必会react面试题总结1

    state、 各种组件生命周期钩子等,但是在函数定义中,我们却无能为力,因此 React 16.8 版本推出了一个新功能 (React Hooks),通过它,可以更好的在函数定义组件中使用 React...好处:跨组件复用: 其实 render props / HOC 也是为了复用,相比于它们,Hooks 作为官方的底层 API,最为轻量,而且改造成本小,不会影响原来的组件层次结构和传说中的嵌套地狱;类定义更为复杂不同的生命周期会使逻辑变得分散且混乱...`的全局性,可以完成一个轻量级的 Redux;(easy-peasy)useCallback: 缓存回调函数,避免传入的回调每次都是新的函数实例而导致依赖组件重新渲染,具有性能优化的效果;useMemo...启动虛拟机后,在cmd中输入 adb devices可以查看设备。redux有什么缺点一个组件所需要的数据,必须由父组件传过来,而不能像flux中直接从store取。...用户访问 ViewView发出用户的 ActionDispatcher 收到Action,要求 Store 进行相应的更新Store 更新后,发出一个"change"事件View 收到"change"事件后

    3.8K30

    在React项目中全量使用 Hooks

    写过 react-redux 的同学可能发这个 reducer 与 react-redux 中的 reducer 很像,我们借助 react-redux 的思想可以实现一个对象部分更改的 reducer...与 useEffect的API相同区别:useEffect在浏览器渲染后执行,useLayoutEffect 在浏览器渲染之前执行,由于JS是单线程,所以 useLayoutEffect 还会阻塞浏览器的渲染...Class 组件的实例,上面包含 Class 的所有方法属性等。...,useSelector 中默认使用的是 ===来判断两次计算的结果是否相同,如果我们返回的是一个对象,那么在 useSelector 中每次调用都会返回一个新对象,所以所以为了减少一些没必要的re-render...下期更新在React 中自定义 Hooks 的应用场景 ,主要讲一些 Hooks 的高阶应用

    4K51

    前端高频react面试题

    那为什么不要在循环、条件或嵌套函数中调用 Hook 呢?因为 Hooks 的设计是基于数组实现。在调用时按顺序加入数组中,如果使用循环、条件或嵌套函数很有可能导致数组取值错位,执行错误的 Hook。...通过this.props获取旧的属性,通过nextProps获取新的props,对比两次props是否相同,从而更新子组件自己的state。...中页面重新加载时怎样保留数据?...这个问题就设计到了数据持久化, 主要的实现方式有以下几种:Redux: 将页面的数据存储在redux中,在重新加载页面时,获取Redux中的数据;data.js: 使用webpack构建的项目,可以建一个文件...// 第二个参数是 state 更新完成后的回调函数什么是 PropsProps 是 React 中属性的简写。

    4.6K20

    社招前端一面react面试题汇总

    ,而是给react用的,大概的作用就是给每一个reactNode添加一个身份标识,方便react进行识别,在重渲染过程中,如果key一样,若组件属性有所变化,则react只更新组件对应的属性;没有变化则不更新...但是这种写法很少使用,并不是常用的写法。React允许对 setState方法传递一个函数,它接收到先前的状态和属性数据并返回一个需要修改的状态对象,正如我们在上面所做的那样。...什么情况下使用异步组件提高页面加载速度,使用reloadable把各个页面分别单独打包,按需加载React中keys的作用是什么?...(Fiber)的 hooks 都是以链表的形式存在 memoizeState 属性中图片update 阶段,每次调用 setState,链表就会执行 next 向后移动一步。...当然可以通过 setState 的第二个参数中的 callback 拿到更新后的结果setState 的批量更新优化也是建立在异步(合成事件、钩子函数)之上的,在原生事件和 setTimeout 中不会批量更新

    4.1K20

    React Hooks

    一、React 的两套 API 以前,React API 只有一套,现在有两套:类(class)API 和基于函数的钩子(hooks) API。 任何一个组件,可以用类来写,也可以用函数来写。...纯函数内部只有通过间接的手段(即通过其他函数调用),才能包含副作用。 二、React Hooks Hook(钩子)是 React 函数组件的副作用解决方案,用来为函数组件引入副作用。...由于 Hooks 可以提供共享状态和 Reducer 函数,所以它在这些方面可以取代 Redux。...组件加载以后,React 就会执行这个函数。 useEffect() 的作用就是指定一个副作用函数,组件每渲染一次,该函数就自动执行一次。组件首次在网页 DOM 加载后,副作用函数也会执行。...因此,副作用函数这时只会在组件加载进入 DOM 后执行一次,后面组件重新渲染,就不会再次执行。

    2.9K10

    前端一面经典react面试题(边面边更)

    React-intl提供了两种使用方法,一种是引用React组件,另一种是直接调取API,官方更加推荐在React项目中使用前者,只有在无法使用React组件的地方,才应该调用框架提供的API。...为了演示这一点,在渲染 Icketang组件时,分别传递和不传递user属性数据来观察渲染结果。...如果一个元素节点在前后两次更新中跨越了层级,那么 React 不会尝试复用它两个不同类型的元素会产生出不同的树。...Hooks,组件中的状态和 UI 变得更为清晰和隔离。...`的全局性,可以完成一个轻量级的 Redux;(easy-peasy)useCallback: 缓存回调函数,避免传入的回调每次都是新的函数实例而导致依赖组件重新渲染,具有性能优化的效果;useMemo

    3K40

    美团前端一面必会react面试题4

    来修改,修改state属性会导致组件的重新渲染。...数据放在redux里面在使用 React Router时,如何获取当前页面的路由或浏览器中地址栏中的地址?...它真正连接 Redux 和 React,它包在我们的容器组件的外一层,它接收上面 Provider 提供的 store 里面的state 和 dispatch,传给一个构造函数,返回一个对象,以属性形式传给我们的容器组件...好处:跨组件复用: 其实 render props / HOC 也是为了复用,相比于它们,Hooks 作为官方的底层 API,最为轻量,而且改造成本小,不会影响原来的组件层次结构和传说中的嵌套地狱;类定义更为复杂不同的生命周期会使逻辑变得分散且混乱...`的全局性,可以完成一个轻量级的 Redux;(easy-peasy)useCallback: 缓存回调函数,避免传入的回调每次都是新的函数实例而导致依赖组件重新渲染,具有性能优化的效果;useMemo

    4.2K30

    阿里前端二面react面试题_2023-02-28

    Redux实现原理解析 为什么要用redux 在React中,数据在组件中是单向流动的,数据从一个方向父组件流向子组件(通过props),所以,两个非父子组件之间通信就相对麻烦,redux的出现就是为了解决...Hooks是 React 16.8 中的新添加内容。它们允许在不编写类的情况下使用state和其他 React 特性。使用 Hooks,可以从组件中提取有状态逻辑,这样就可以独立地测试和重用它。...中 refs 的作用是什么 Refs 是 React 提供给我们的安全访问 DOM元素或者某个组件实例的句柄 可以为元素添加ref属性然后在回调函数中接受该元素在 DOM 树中的句柄,该值会作为回调函数的第一个参数返回...redux applyMiddleware Api 源码中每个middleware 接受2个参数, Store 的getState 函数和dispatch 函数,分别获得store和action,最终返回一个函数...:组件将要接收到属性的时候调用 shouldComponentUpdate:组件接受到新属性或者新状态的时候(可以返回 false,接收数据后不更新,阻止 render 调用,后面的函数不会被继续执行了

    2.5K20

    关于前端面试你需要知道的知识点

    React-intl是雅虎的语言国际化开源项目FormatJS的一部分,通过其提供的组件和API可以与ReactJS绑定。...React-intl提供了两种使用方法,一种是引用React组件,另一种是直接调取API,官方更加推荐在React项目中使用前者,只有在无法使用React组件的地方,才应该调用框架提供的API。...React Hooks 的限制主要有两条: 不要在循环、条件或嵌套函数中调用 Hook; 在 React 的函数组件中调用 Hook。 那为什么会有这样的限制呢?...那为什么不要在循环、条件或嵌套函数中调用 Hook 呢?因为 Hooks 的设计是基于数组实现。在调用时按顺序加入数组中,如果使用循环、条件或嵌套函数很有可能导致数组取值错位,执行错误的 Hook。...,通过this.props获取旧的属性,通过nextProps获取新的props,对比两次props是否相同,从而更新子组件自己的state。

    6.4K30

    【愚公系列】2023年03月 其他-Web前端基础面试题(react专项_35道)

    hooks 产生的背景及 hooks的优点 13、 React hooks 怎么模拟生命周期 14、React 中的 `useState()` 是什么?...、渲染到页面上 render:组件在这里生成虚拟的 DOM 节点 componentDidMount:组件真正在被装载之后 运行中状态: componentWillReceiveProps:组件将要接收到属性的时候调用...componentDidUpdate()——在呈现发生后立即调用。 componentWillUnmount()——在从DOM卸载组件后调用 28、什么是React中的合成事件?...合成事件是充当浏览器原生事件的跨浏览器包装器的对象。 它们将不同浏览器的行为合并到一个API中。 这样做是为了确保事件在不同的浏览器之间显示一致的属性。...35、 什么是属性代理 属性代理组件继承自React.Component,通过传递给被包装的组件props得名 diff 的结果来更新 DOM。

    10.6K10

    React常见面试题

    动态加载(异步组件)加载时会有延迟,在延迟期间可以将一些内容展示给用户,比如:loading (react16.6新增的API) const resource = fetchProfileData();...HOC(高阶组件) 属性代理 反向继承 渲染属性(render props) react-hooks Mixin (已废弃,不讨论) # PureComponent组件介绍?...服务端渲染)中,componentWillMount生命周期会执行两次,导致多余请求 在react16进行fiber重写后,componentWillMount 可能在一次渲染中多次调用 react17...(省的把纯函数组件/其他组件改来改去)) 解耦:react hooks可以更方便地把UI和状态分离,做到更彻底的解耦 组合:hooks 中可以引用另外的hooks 形成新的hooks, 组合千变万化 函数友好...共享状态钩子,在组件之间共享状态,可以解决react 逐层通过props传递数据的问题 使用流程(使用流程和react-redux差不多): 创建store:通过 createContext Api 包裹整个组件

    5.4K20

    百度前端一面高频react面试题指南_2023-02-23

    但是对于合成事件来说,有一个事件池专门来管理它们的创建和销毁,当事件需要被使用时,就会从池子中复用对象,事件回调结束后,就会销毁事件对象上的属性,从而便于下次复用事件对象。...该函数会在装载时,接收到新的 props 或者调用了 setState 和 forceUpdate 时被调用。如当接收到新的属性想修改 state ,就可以使用。...执行不该被使用的API,出现ref失控」的情况 为了防止错用/滥用导致ref失控,React限制「默认情况下,不能跨组件传递ref」 为了破除这种限制,可以使用forwardRef。...如果一个元素节点在前后两次更新中跨越了层级,那么 React 不会尝试复用它 两个不同类型的元素会产生出不同的树。..., callback)中的callback拿到更新后的结果 setState 的批量更新优化也是建立在“异步”(合成事件、钩子函数)之上的,在原生事件和setTimeout 中不会批量更新,在“异步”中如果对同一个值进行多次

    3.7K10

    152. 精读《recoil》

    这也导致 Recoil API 偏多被诟病,这也是 Immutable 模式下存的编码心智负担,虽然很好理解,但也只有 useSelector 或 Recoil 这样拆分 API 的方式可以解决。...Immutable 心智负担 API 较多,在简介中也提到了,这可能是 Immutable 自带的硬伤,而不仅仅是 Recoil 的问题。...Immutable 模式中,对数据流只有读与写两种诉求,而申明式编程讲究的是数据变化后 UI 自动 Rerender,那么对数据的读自然而然就被赋予了订阅其变化后触发 Rerender 的期待,但是写与读不同...Recoil 的本质 从 Hooks API 到派生值,这两个核心特点恰巧是对 Context 与 useMemo 的封装。...首先基于 Hooks 的 useContext 已经足够轻量易用,可以认为 atom 与 useRecoilState、useRecoilValue、useSetRecoilValue 分别对应封装后的

    1.1K10

    React进阶(6)-react-redux的使用

    前言 撰文:川川 您将在本文当中学习到 react-redux是什么,解决什么问题 UI组件以及容器组件 react-redux中两个重要的API,Provider以及connect mapStateToProps...npm install --save react-redux 或 yarn add react-redux 安装完成后,可以在根目录的package.json中查看是否有的 对于理解 react-redux...它执行的结果依然是一个函数,所以才可以在后面在加上一个圆括号的,而圆括号内又接收一个参数,即是UI组件,也是傻瓜组件 有两次 connect的执行,第一次 connect函数的执行是从react-redux...hooks,有了这个你可以替代Redux,或者react-redux,但是笔者认为,技术没有金弹或者银弹,适合业务的技术才是最好的 理解redux以及react-redux不妨也是一种技术选择,更好的与...React hooks做比较,从而选择一个最适宜的.

    2.8K10

    【React】406- React Hooks异步操作二三事

    如何在组件加载时发起异步任务 这类需求非常常见,典型的例子是在列表组件加载时发送请求到后端,获取列表后展现。 发送请求也属于 React 定义的副作用之一,因此应当使用 useEffect 来编写。...如何在组件交互时发起异步任务 另一种常见的需求是要在组件交互(比如点击某个按钮)时发送请求或者开启计时器,待收到响应后修改数据进而影响页面。...这里和上面一节(组件加载时)最大的差异在于 React Hooks 只能在组件级别编写,不能在方法( dealClick)或者控制逻辑( if, for 等)内部编写,所以不能在点击的响应函数中再去调用...在 dealClick 中设置计时器时返回值依旧写给了这个局部变量(即读和写都是同一个变量),因此在后续卸载时,虽然组件重新运行导致出现一个新的局部变量 timer,但这不影响闭包内老的 timer,所以结果是正确的...在 React 中 setState 内部是通过 merge 操作将新状态和老状态合并后,重新返回一个新的状态对象。不论 Hooks 写法如何,这条原理没有变化。

    6.7K20

    一份react面试题总结

    好处: 跨组件复用: 其实 render props / HOC 也是为了复用,相比于它们,Hooks 作为官方的底层 API,最为轻量,而且改造成本小,不会影响原来的组件层次结构和传说中的嵌套地狱;...`的全局性,可以完成一个轻量级的 Redux;(easy-peasy) useCallback: 缓存回调函数,避免传入的回调每次都是新的函数实例而导致依赖组件重新渲染,具有性能优化的效果; useMemo...为了演示这一点,在渲染 Icketang组件时,分别传递和不传递user属性数据来观察渲染结果。...redux 在React中页面重新加载时怎样保留数据?...这个问题就设计到了数据持久化, 主要的实现方式有以下几种: Redux: 将页面的数据存储在redux中,在重新加载页面时,获取Redux中的数据; data.js: 使用webpack构建的项目,可以建一个文件

    8.3K20
    领券