当前位置: 首页 > news >正文

面试 React 框架八股文十问十答第二期

面试 React 框架八股文十问十答第二期

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)redux 的工作流程?

  • 触发一个 action,通过调用 store.dispatch(action) 发起。
  • Redux store 收到 action 后,通过 reducer 函数处理,生成新的 state。
  • 订阅了 store 的组件会收到新的 state,从而更新视图。

2)react-redux 是如何工作的?

  • react-redux 提供了 Provider 组件,它将 Redux store 传递给应用的所有组件。
  • 使用 connect 函数将 React 组件连接到 Redux store,该函数接受两个参数:mapStateToPropsmapDispatchToProps,分别用于将 state 和 action 映射到组件的 props。
  • 连接后的组件可以通过 props 直接访问 Redux store 的 state 和 dispatch 函数。

3)redux 中如何进行异步操作?

  • 可以使用中间件来处理异步操作,最常见的是 redux-thunkredux-saga 等。
  • 使用 redux-thunk,action 可以是一个函数而不仅仅是一个对象。这个函数接受 dispatchgetState 作为参数,允许进行异步操作后再分发其他 action。

4)redux 异步中间件 redux-thunk 的优劣?

  • 优点:
    • 简单易用,容易理解和上手。
    • 良好的社区支持,广泛应用于许多项目。
  • 缺点:
    • 对于复杂的异步流程,可能会导致 action 创建函数嵌套过深,使代码难以维护。
    • 可能不如其他中间件处理一些复杂的异步场景。

5)合成事件是什么?

  • 在 React 中,合成事件是指由 React 负责包装浏览器原生事件对象而创建的事件对象。React 在不同浏览器之间提供了一致的事件处理方式。
  • 这样的设计使得 React 能够屏蔽底层浏览器的差异,提供一致性的事件接口,方便开发者编写跨浏览器的代码。React 的事件系统支持冒泡、捕获、委托等特性,同时也提供了合成事件对象的属性和方法。

6)React Hooks 原理?

  • Hooks 是 React 16.8 引入的特性,允许函数组件内部使用 state、生命周期等 React 特性。它们是函数,可让你在不编写 class 的情况下使用 state 以及其他 React 特性。
  • Hooks 本质上是一些 JavaScript 函数,通过调用 React 提供的特定函数(如 useState, useEffect, useContext 等)来在函数组件中使用 React 的功能。
  • 这些 Hook 函数通过使用 React 内部的特殊机制来跟踪组件的状态和生命周期,并确保在组件重新渲染时状态保持不变。

7)为什么 ReactHooks 中不能有条件判断?

  • Hooks 需要在每次渲染中按照相同的顺序被调用。如果在条件语句中使用 Hook,会导致调用顺序发生变化,违反了 React Hooks 的规则。
  • 这会导致 React 在重新渲染时无法正确地追踪和处理状态的变化,因此条件判断内部使用 Hook 会引发错误。

8)用过哪些 Hook?

  • useState: 用于在函数组件中添加状态。
  • useEffect: 处理副作用,如数据获取、订阅、手动操作 DOM 等。
  • useContext: 获取 React 上下文。
  • useReducer: 可选的 state 管理方案,用于处理复杂的状态逻辑。
  • useCallbackuseMemo: 优化性能,避免不必要的重新渲染。

9)Class 组件 VS Hook

  • Class 组件:使用传统的生命周期方法,包含较多的模板代码和状态管理逻辑,可读性较差。
  • Hook:函数式组件更简洁、易读,通过提供各种 Hook,使得组件逻辑更为清晰,减少样板代码,更方便复用和测试。

10)自定义过哪些 Hook?

  • 自定义 Hook 是指在函数中封装并抽象出可复用的逻辑。我可以帮你列举一些常见的自定义 Hook,比如处理表单逻辑、订阅事件、管理定时器等。

相关文章:

  • 【电源专题】案例:不同的充电芯片在没插入电池但插入USB充电器情况下为什么无法兼容?
  • 计算机网络夯实之路-HTTP详解
  • 微服务治理:微服务断路器(微服务故障隔离模式)详解
  • 阿里云国际服务器设置安全防护程序
  • 阿里云提示服务器ip暴露该怎么办?-速盾网络(sudun)
  • 如何激活数据要素价值
  • LeetCode 36. 有效的数独
  • Docker的基本管理
  • sklearn快速实现python机器学习算法
  • Java后端开发——Mybatis实验
  • idea使用docker-compose发布应用程序
  • 开机自启动android app
  • 嵌入式-Stm32-江科大基于寄存器点亮LED灯
  • docker 批量更改镜像标签
  • Quartus 软件界面介绍与部分使用技巧
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • IndexedDB
  • PHP 7 修改了什么呢 -- 2
  • PHP的Ev教程三(Periodic watcher)
  • underscore源码剖析之整体架构
  • 让你的分享飞起来——极光推出社会化分享组件
  • 我与Jetbrains的这些年
  • kubernetes资源对象--ingress
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • #vue3 实现前端下载excel文件模板功能
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)socket Aio demo
  • (转)我也是一只IT小小鸟
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET 中的轻量级线程安全
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .NET命名规范和开发约定
  • /etc/fstab和/etc/mtab的区别
  • @angular/cli项目构建--http(2)
  • @Autowired @Resource @Qualifier的区别
  • @GlobalLock注解作用与原理解析
  • @在php中起什么作用?
  • [2016.7 day.5] T2
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [Bug]使用gradio创建应用提示AttributeError: module ‘gradio‘ has no attribute ‘inputs‘
  • [BUUCTF 2018]Online Tool(特详解)
  • [BUUCTF]-Reverse:reverse3解析
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
  • [c#基础]DataTable的Select方法
  • [C++]unordered系列关联式容器
  • [C++]打开新世界的大门之C++入门
  • [ESP32 IDF]web server