react面试题(三)

2023-11-09

1. setState 何时同步何时异步?

(1) setState
只在合成事件(react为了解决跨平台,兼容性问题,自己封装了一套事件机制,代理了原生的事件,像在jsx中常见的onClick、onChange这些都是合成事件)和钩子函数(生命周期)中是“异步”的,在原生事件和
setTimeout 中都是同步的

(2)setState的“异步”并不是说内部由异步代码实现,其实本身执行的过程和代码都是同步的,只是合成事件和钩子函数的调用顺序在更新之前,导致在合成事件和钩子函数中没法立马拿到更新后的值,形式了所谓的“异步”,当然可以通过第二个参数
setState(partialState, callback) 中的callback拿到更新后的结果

(3)setState 的批量更新优化也是建立在“异步”(合成事件、钩子函数)之上的,在原生事件和setTimeout
中不会批量更新,在“异步”中如果对同一个值进行多次 setState , setState
的批量更新策略会对其进行覆盖,取最后一次的执行,如果是同时 setState 多个不同的值,在更新时会对其进行合并批量更新

2. react渲染机制

(1)当页面一打开,就会调用render构建一棵DOM树

(2)当数据发生变化( state | props )时,就会再渲染出一棵DOM树

(3)此时,进行diff运算,两棵DOM树进行差异化对比,找到更新的地方进行批量改动

3. React中refs 的作用是什么?

Refs 是 React 提供给我们的安全访问 DOM 元素或者某个组件实例的句柄

我们可以为元素添加 ref 属性然后在回调函数中接受该元素在 DOM 树中的句柄

该值会作为回调函数的第一个参数返回

4.在构造函数中调用 super(props) 的目的是什么

在 super() 被调用之前,子类是不能使用 this 的,在 ES2015 中,子类必须在 constructor 中调用
super()。传递 props 给 super() 的原因则是便于(在子类中)能在 constructor 访问 this.props

5. setState的两个参数

第一个参数是要改变的state对象

第二个参数是state导致的页面变化完成后的回调,等价于componentDidUpdate

6、为什么虚拟 DOM 会提高性能? 说下他的原理

虚拟 dom 相当于在 js 和真实 dom 中间加了一个缓存,利用 dom diff 算法避免了没有必要的 dom
操作,从而提高性能

7、理解“在React中,一切都是组件”这句话

组件是 React 应用 UI 的构建块。这些组件将整个 UI 分成小的独立并可重用的部分
每个组件彼此独立,而不会影响 UI 的其余部分

8. 了解redux么,说一下redux

redux 是一个应用数据流框架,主要是解决了组件间状态共享的问题,原理是集中式管理,主要有三个核心方法,action,store,reducer

三大原则:

1 唯一数据源(整个应用的 state 被储存在一棵 object tree 中,并且这个 object tree 只存在于唯一一个store 中)
2 reducer必须是纯函数(输入必须对应着唯一的输出)
3 State 是只读的, 想要更改必须经过派发action

9. redux的工作流程:

使用通过reducer创建出来的Store发起一个Action,reducer会执行相应的更新state的方法,当state更新之后,view会根据state做出相应的变化

1 提供getState()获取到state
2 通过dispatch(action)发起action更新state
3 通过subscribe()注册监听器

10.redux数据流通的过程

1 用户操作视图   
2 发起一次dispatch。有异步:返回一个函数(使用thunk中间件),没有异步:return {}   
3 进入reducer,通过对应的type去修改state,最后返回一个新的state

11.redux本身有什么不足?

1 向事件池中追加方法时,没有做去重处理   
2 把绑定的方从在事件池中移除掉时,用的是arr.splice(index,1),这样可能会引起数组塌陷   
3 reducer中state,每次返回都需要深克隆,可以在redux中获取状态信息时,深克隆,这样就不用在reducer里深克隆了

12 列出 Redux 的组件

1 Action – 这是一个用来描述发生了什么事情的对象
2 Reducer – 这是一个确定状态将如何变化的地方
3 Store – 整个程序的状态/对象树保存在Store中
4 View – 只显示 Store 提供的数据

13. 解释 Reducer 的作用

Reducers 是纯函数,它规定应用程序的状态怎样因响应 ACTION 而改变。Reducers 通过接受先前的状态和 action
来工作,然后它返回一个新的状态。它根据操作的类型确定需要执行哪种更新,然后返回新的值。如果不需要完成任务,它会返回原来的状态

14 Store 在 Redux 中的意义是什么?

Store 是一个 JavaScript
对象,它可以保存程序的状态,并提供一些方法来访问状态、调度操作和注册侦听器。应用程序的整个状态/对象树保存在单一存储中。因此,Redux
非常简单且是可预测的。我们可以将中间件传递到 store 处理数据,并记录改变存储状态的各种操作。所有操作都通过 reducer
返回一个新状态

15. context 在函数组件中与类组件中分别是如何获取并使用的?

    类组件:const context=React.createContext()
    页面使用:<context.Provider value={themes.dark}><Home/></context.Provider>
    子组件使用<context.Consumer> {()=>{}} </context.Consumer>
    hooks:context=React.createContext()
    使用:

```jsx
    <context.Provider value={themes.dark}>
    	<Home/>
    </context.Provider>
	子组件::const context=useContext(context)

16. 路由直系页面可以直接使用 history,那非直系,隔代页面中如何使用路由相关信息?

 withRouter

17. 三列布局,左右分别为宽为 200px,中间自适应,要求使用三种以上方法实现!

定位 浮动 flex

18. 浏览器兼容性问题有哪些?(css、js)

  • img 下面白边
  • a 下划线
  • li 父级有边框浏览器不同可能在边框外面也可能在边框里面

19. 如何实现一个元素垂直水平居中,用三种以上代码实现?

定位(定位中有俩种方法:一种是直接定位,一种是配合css3中的transform:translateY加具体的高度来实现垂直居中)flex

20. 在使用 react 项目开发时,你们是如何与后端进行接口联调的?

通过代理发送请求,然后ajax+axios获取请求数据看数据能不能用

21. 在我们使用 mobx 时,我们在具体页面中如何使用 mobx 中的 state,如何操作 setState?

 @withRouter
    @inject("first")
    @observa
    this.props.first.定义的名称
    通过@action 进行数据改写
    使用 this.porps.first.事件名称调用

22. 在使用 redux 如何修改 state,通过什么方法实现,分别是什么?

通过 reducer 返回一个新数据,使用 action 进行改变 state,用 dispatch 操作了具体 action

23. 在 redux 中 action 是做什么用的?如何书写?

action 是改变 state 的

24. 在 redux 中如何实现一个 ajax 请求?

通过 Actions 中进行 ajax 请求

25. 如何将两个或多个组件嵌入到一个组件中?

用div或者<React.Fragment></React.Fragment>标签包裹

26. 如何在组件更新时再发起一个ajax 请求,在更新时需要注意什么?

在ComponentDidUpdata中写ajax请求,需要注意的是,为了防止死循环,需要加一个if判断,满足条件时再发起请求。

27. 路由直系页面可以直接使用history,那非直系,隔代页面中如何使用路由相关信息?

使用withRouter将非直系包裹。

28.hooks的出现给react带来了什么好处?

Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性

29. React.PureComponent和Component的区别?

purecomponent是一个更具有性能的component,它可以通过props和state的浅层对比来实现组件的shouldComponentUpdate,更新,而component没有

30.PureComponent优缺点
优点:

不需要开发者自己实现shouldComponentUpdate,就可以进行简单的判断来提升性能。

缺点:

可能会因深层的数据不一致而产生错误的否定判断,从而shouldComponentUpdate结果返回false,界面得不到更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react面试题(三) 的相关文章

  • 函数式组件与类组件有何不同?

    与React类组件相比 React函数式组件究竟有何不同 在过去一段时间里 典型的回答是类组件提供了更多的特性 比如state 当有了Hooks后 答案就不再是这样了 或许你曾听过它们中的某一个在性能上的表现优于另一个 那是哪一个 很多此类
  • css in js开发利器 - styled-components(样式组件)

    styled components 是一个常见的 css in js 类库 和所有同类型的类库一样 通过 js 赋能解决了原生 css 所不具备的能力 比如变量 循环 函数等 注意 有时候 React 版本和 styled componen
  • React Router 路由守卫

    React Router 路由守卫 组件内路由守卫 1 下面是使用高阶组件实现路由守卫的示例代码 import React from react import Route Redirect from react router dom con
  • 对useReducer的理解

    useReducer是React提供的一个高级Hook 它不像useEffect useState useRef等必须hook一样 没有它我们也可以正常完成需求的开发 但useReducer可以使我们的代码具有更好的可读性 可维护性 可预测
  • 【前端】react-markdown配置解析

    文章目录 react markdown基本配置 同步预览配置 MdEditorComponent js reducer js initBlogState js action types js sync actions js store js
  • react的条件渲染(或者组件渲染)五种方式 --开发基础总结

    1 使用if的方式判断是否渲染某个组件 function UserGreeting props return h1 Welcome back h1 function GuestGreeting props return h1 Please
  • ant design pro v5 配置拦截器,header

    ant design pro v5 配置拦截器 header 1 资料文档 https umijs org zh CN plugins plugin request requestinterceptors 2 编写app tsx 我这里是自
  • 在校学生如何白嫖黑群辉虚拟机和内网穿透,实现海量资源的公网访问?(小白专用)

    文章目录 前言 本教程解决的问题是 按照本教程方法操作后 达到的效果是 前排提醒 1 搭建群辉虚拟机 1 1 下载黑群辉文件 vmvare虚拟机安装包 1 2 安装VMware虚拟机 1 3 解压黑 群辉虚拟机文件 1 4 虚拟机初始化 1
  • 如何在 Ubuntu 20.04 上使用 React 前端设置 Ruby on Rails v7 项目

    作者选择了电子前沿基金会接受捐赠作为为捐款而写程序 介绍 红宝石 on Rails是一个流行的服务器端 Web 应用程序框架 它为当今网络上存在的许多流行应用程序提供支持 例如GitHub Basecamp 声云 Airbnb and Tw
  • Ant Design Pro 从零到一教程

    说在最前面的话 可是能全网唯一适合小白的antd教程 因为我找了接近一个周的教程 无论是视频 博客等等都没有比较完整的教程 所以才说这可能是唯一全网适合小白教程 文章末有相关学习链接 适用人群 喜欢看文字或者代码学习的人 学习的人掌握基本的
  • React页面设计初体验

    1 定制路由 export default login path login name login component layouts BlankLayout routes path login component Login Index
  • React路由懒加载的实现

    React lazy 通过引入lazy Suspense两个方法实现路由懒加载 首先 我们需要在组件中引入lazy Suspense这两个方法 然后我们需要通过Suspense组件 包裹着注册路由 import React Componen
  • 【react】新旧生命周期对比

    componentWillUpdate componentWillReceiveProps componentWillMount 上述这三个生命周期在V18以上的版本中 使用时要加上UNSELF name
  • hook中使用ref使用

    对于antd的fom表单 hook使用ref import React useState useEffect useRef from react const dateRef useRef dateRef current setFieldsV
  • React解密:React Hooks函数之useCallback和useMemo

    之所以将useCallback和useMemo放到一起 从某种意义上说 他们都是性能优化的始作俑者 他们也有很多的共性 我们先来回顾一下class组件性能优化的点 调用 setState 就会触发组件的重新渲染 无论前后 state 是否相
  • 前端学科面试题大全

    作用域和值类型引用类型的传递 变量作用域 作用域变量访问区域 变量值存在栈中 变量赋值相当于值赋值 值传递与引用传递有哪些区别 函数内部 变量会先声明 形式参数变量声明提升 整个函数体有var声明的变量 如果没有访问全局定义的num2 函数
  • React class组件、react-hook函数组件分别实现五子棋

    react class类组件 react hook函数组件分别实现五子棋 前言 使用create react app脚手架简单搭建 不用安装其他依赖 纯 js css实现 这里就只是简单的说明目录结构和思路 具体的代码实现请转到 Githu
  • 如何替换对象的key值

    发生的场景 现在用antd组件库 有些组件想渲染数据的话 我要根据他们官网给的字段名称对应起来才能渲染上去 这个是复选框选中 保存的时候 字段需要按照后台约定的传入code value 1 常规循环遍历 大招来了 哈哈哈 才疏学浅 我觉得是
  • React配置@src根路径

    第一种 直接修改node modules包中的webpack config js文件 找到node modules react scripts config webpack config js文件 修改其中alias中的配置 添加 src
  • 自定义hooks

    自定义传参hooks 把大多数的通用代码 或者props 抽成一个hooks 用hooks实现上下文 就不用再一一传参了 实现原理 主要是通过createContext useContext 生产 消费者模式 用于大量props一层一层传参

随机推荐

  • RestHighLevelClient封装使用,Java调用ES客户端 [支持ES6.x]

    前言 之前做项目的时候 需要用到Es的操作 本来想使用EsJpa的 即SpringDataElasticsearch 结果项目采用的是SpringBoot1 x版本 不得已 只要自己封装RestHighLevelClient来使用 不过网上
  • 蓝桥杯python技能升级

    只通过了百分之40 后面超时了 给没有头绪的伙计们一个思路吧 也请大佬给一个更好的解题思路 import math n m map int input split max 0 此为加的最大点 当加的次数小于0的时候 return0 if m
  • el-select下拉框只回显value不回显label的原因以及解决方法

    el select的采用的是map的key value结构 因此只显示value而不显示label的原因是 value的类型不正确 只需要在回显之前加上一行代码 将这个value转换成对应的类型即可 我这个里面需要的int类型 因此转成in
  • 集合相似度(PAT)

    题目链接 https www patest cn contests gplt L2 005 一开始用map超时了 总是有一组数据超时 当时觉得很纳闷 后来学到了 其实set也是可以开数组的 map也是 include
  • ubuntu 下安装chrome浏览器

    1 将google chrome stable current amd64软件复制移动到家目录下 2 打开终端 路径在家目录下 3 依次运行下面三条命令 sudo apt get install google chrome stable s
  • Swift的几种传值方式

    传值方式 在进行页面跳转过程中无法避免需要进行值的传递 那么值的传递可以分为正向传值和反向传值 例如在SourceViewController跳转至DestinationViewController的过程中需把前者的属性值传递给后者称为正向
  • 【系列 1】手写vue响应式原理

    手写vue响应式原理 首先我们看看原生 vue 做了什么 可见 vm 第一层与 data 内都能获取到 data 数据 并且其数值都进行了 ge
  • 王道训练营-C语言-1

    1 字符 include
  • 【热门框架】Maven中聚合,继承指的是什么?有什么作用?

    Maven中的聚合和继承是两个重要的功能 用于管理多个项目的共同部分 1 聚合 Maven中的聚合 Aggregation 指的是将多个子项目聚合成一个父项目的过程 聚合的语法如下 xml
  • 数据库初探(1)————关于InnoDB和MyISAM两种数据库存储引擎

    1 mysql中最常见的两种数据库引擎 InnoDB存储引擎 InnoDB存储引擎是Mysql的默认事务引擎 也是最重要 使用最广泛的存储引擎 它被设计用来处理大量的短期事务 短期事务大部分情况下都是可以正常提交的 很少回滚 MyISAM存
  • 【超详解】JavaWeb三大组件讲解

    文章目录 前言 一 Servlet 二 Filter 三 Listener 总结 前言 JavaWeb三大组件指的是 Servlet Filter Listener 三者提供不同的功能 然而很多人可能只用过其中一个或者两个 Servlet
  • 创建React项目

    在开发React项目前最关键的当然是项目的创建 现在的前端工程化使得前端项目的创建也变得越来越复杂 在这里介绍三种从零开始创建React项目的方式 分别是在浏览器中直接引入 使用官方脚手架create react app 使用Webpack
  • 不会盗QQ,还当什么程序员?

    上面这个段子估计很多朋友都看过 程序员被黑过无数次 在其他人眼中 仿佛我们需要写得了木马 翻得了围墙 修得了电脑 找得到资源 但凡是跟计算机沾点边的 咱都得会才行 段子归段子 言归正传 对于咱们程序员来说 多多少少了解一些信息安全的技术知识
  • 打印HashMap的方法分享

    HashMap简介 Hash Map是哈希表基于 Map 接口的实现类 HashMap用于存储数据 允许使用null值和null键 除了非同步和允许使用 null 之外 HashMap 类与 Hashtable 大致相同 HashMap不保
  • 区块链三加一:什么是量化交易

    量化交易是指以先进的数学模型替代人为的主观判断 利用计算机技术从庞大的历史数据中海选能带来超额收益的多种 大概率 事件以制定策略 极大地减少了投资者情绪波动的影响 避免在市场极度狂热或悲观的情况下作出非理性的投资决策 量化交易 有时候也称自
  • Kali Linux Armitage生成被控端和主控端

    目录 说明 使用 Armitage生成被控端和主控端 说明 按照 Kali Linux2 网络渗透测试实践指南 第二版 第八章操作 仅供学习讨论使用 请勿进行非法操作 使用 Armitage生成被控端和主控端 选中 payload 然后选择
  • 深入解析锂电池保护电路工作原理

    1 锂离子电池介绍 锂离子电池是一种二次电池 充电电池 它主要依靠锂离子在正极和负极之间移动来工作 在充放电过程中 Li 在两个电极之间往返嵌入和脱嵌 充电时 Li 从正极脱嵌 经过电解质嵌入负极 负极处于富锂状态 放电时则相反 锂离子电池
  • 对象不支持“addEventListener”属性或方法 ie8 jquery

    解决方法 1 请查看你使用的jquery版本 2 jQuery 2 x 已经不支持IE9以下的IE浏览器 如果你想继续支持IE6 7 8 请使用jQuery 1 x版本 最新版本 jQuery 1 11 0 3 如果要兼容 IE 6 7 8
  • 假设检验/T检验/F检验/Z检验/卡方检验

    显著性水平 一个概率值 原假设为真时 拒绝原假设的概率 表示为 alpha 常用取值为0 01 0 05 0 10 什么是P值 p值是当原假设为真时样本观察结果及更极端结果出现的概率 如果P值很小 说明这种情况发生的概率很小 如果这种情况还
  • react面试题(三)

    1 setState 何时同步何时异步 1 setState 只在合成事件 react为了解决跨平台 兼容性问题 自己封装了一套事件机制 代理了原生的事件 像在jsx中常见的onClick onChange这些都是合成事件 和钩子函数 生命