位置: IT常识 - 正文

前端面试题整理——React考点和回答(前端面试题目100及最佳答案)

编辑:rootadmin
一、基础使用 1、变量、表达式、class style、子元素和组件 2、if else、三元表达式、逻辑运算符 && || 3、map、key 4、bind this 5、关于event参数,react的event不是原生的,event.nativeEvent才是指向原生event,所有的事件都是 ...

推荐整理分享前端面试题整理——React考点和回答(前端面试题目100及最佳答案),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:前端面试题整理怎么做,前端面试题目100及最佳答案,前端面试题汇总.pdf,前端面试题汇总.pdf,前端面试题汇总.pdf,前端面试题汇总.pdf,前端面试题2021及答案,前端面试题大全,内容如对您有帮助,希望把文章链接给更多的朋友!

一、基础使用

1、变量、表达式、class style、子元素和组件

2、if else、三元表达式、逻辑运算符 && ||

3、map、key

4、bind this

5、关于event参数,react的event不是原生的,event.nativeEvent才是指向原生event,所有的事件都是挂在在document上。

6、传递自定义参数 ,最后一个参数会自动加上event

7、受控组件,表单的值受到 this.state 的控制影响。

8、组件使用

  (1)props 传递数据

  (2)props 传递函数

  (3)props 类型检查,使用prop-types插件

9、setState(重点)

  (1)不可变值

  不能直接修改state,使用不可变值

  (2)可能是异步更新

  setTimeout中的setState是同步的

  自定义的 DOM 事件,setState是同步的

  (3)可能会被合并

  传入函数不会被合并

10、组件生命周期

父子组件生命周期和VUE的调用顺序是一样的。

二、React 高级特性

1、函数组件:纯函数,输入props,输出JSX

没有实例,没有生命周期,没有state,不能扩展其他方法

2、非受控组件

  (1)ref

  (2)defaultValue、defaultChecked

  (3)手动操作DOM元素

非受控组件使用场景:必须手动操作DOM元素,setState实现不了,如文件上传<input type=file>、富文本编辑器

3、Portals

组件默认会按照既定层次嵌套渲染,如何让组件渲染到父组件以外?

使用react-dom中的createPortal,指定渲染dom节点位置

4、context

应用场景:从外层组件给下面所有子层传递简单参数。如设置主题、系统语言。

使用的API,如React.createContext,.Provider,.Consumer

5、异步组件

import()语法,React.lazy,React.Suspense

三、性能优化

1、shouldComponentUpdate(简称SCU)

React 默认父组件有更新,子组件则无条件也更新。

SCU默认返回true,使用SCU对props和states进行前后变化对比来确定组件进不进行渲染。

SCU必须要配合不可变值来进行,不然前后的值都是相等无法进行对比。

2、PureComponent 和 React.memo

PureComponent纯组件,在SCU中实现了浅比较

memo是函数组件中的PureComponent

3、不可变值 immutable.js

彻底拥抱不可变值,基于共享数据不是深拷贝,速度好。

有一定学习和迁移成本,按需使用。

四、组件公共逻辑的抽离

  (1)mixin,已被React废弃

  (2)高阶组件HOC

  高阶组件不是一种功能,而是一种模式,类似于工厂模式。如下代码示例:

const HOCFactory = (Component) =>{class HOC extends React.Component {// 这里定义多个组件的公共逻辑render(){return <Component {...this.props} /> // 返回拼装结果}}return HOC}const c1 = HOCFactory(Component1)const c2 = HOCFactory(Component2)

  如代码所示,传入一个组件,最后返回一个组件。方法中间定义公共逻辑。

  Redux 的 connect 就是高阶组件。

  (3)Render Props

  核心思想是通过一个函数将 class 组件的 state 作为 props 传递给纯函数组件

class Factory extends React.Component {constructor(){this.state = {} // 这里的 state 是多个组件的公共逻辑的数据}// 修改staterender(){return <div>{this.props.render(this.state)}</div>}}const App = ()=>( <Factory render={ // render 是一个函数组件 (props) => <p>{props.a}{props.b}</p> }/>)

  

HOC:模式简单,但会增加组件层级

Render Props:代码简洁,学习成本较高

五、Redux

1、基本概念

store,通过createStore(reducer),传入一个reducer来创建,来存放应用的状态。API有 { subscribe, dispatch, getState }

subscribe 订阅更新

dispatch 改变内部state的唯一方法,dispatch触发一个action

getState 获取state值

state,当state变化时需要返回全新的对象,坚持不可变值原则。

action,修改state值

reducer,形式为(state,action) => state 的纯函数,描述了action如何把state转变成下一个state

2、单项数据流

单项数据流代码步骤:

  (1)dispatch(action)

  (2)reducer => newState

  (3)subscribe 触发通知

3、react-redux

<Provider>

connect

mapStateToProps

mapDispatchToProps

4、异步action

同步是直接返回一个action对象,异步就是返回函数,其中带有dispatch 参数

使用异步action还需要使用中间件创建store,例如使用redux-thunk,以及使用redux的applyMiddleware的API

如:const store = createStore(reducer,applyMiddleware(thunk))

redux-thunk、redux-promise、redux-saga等中间件都可以实现异步action

5、中间件

中间件其实就是改造dispatch,如下自己实现个简单中间件:

// 复制原来的dispatchlet next = store.dispatch// 重新定义dispatchstore.dispatch = function dispatchAndLog(action){console.log('执行中间件逻辑',action)// 然后再执行原有dispatchnext(action)console.log('执行完后执行的逻辑',store.getState())}前端面试题整理——React考点和回答(前端面试题目100及最佳答案)

  

六、React-router

路由模式(hash、H5 history),同vue-router

路由配置(动态路由、懒加载),同vue-router

七、React 原理

1、函数式编程,重点是不可变值

2、vdom 和 diff算法

3、JSX本质是React.createElement(标签,属性对象,子节点)方法,类似于h函数。

h函数返回的是vnode,那么JSX返回的也是vnode。

第一个参数可能是个组件也可能是个html标签,所以就要求html标签一定是小写,组件名开头要大写,以此来判断。

4、合成事件

所有事件挂载到document上

event不是原生的,是SyntheticEvent合成事件对象

和 vue事件不同,和dom事件也不同

为什么要合成事件机制?

  (1)更好的兼容性和跨平台

  (2)挂载到domcument,减少内存消耗,避免频繁解绑

  (3)方便事件的统一管理(如事务机制)

5、setState batchUpdate

setState:异步(普通使用),同步(setTimeout、DOM事件)

     合并(对象形式),不合并(函数形式)

setState主流程:

batchUpdate 机制:

batchUpdate 机制其实是react的方法执行或者生命周期执行,一开始都会先定义一个batchUpdate状态为进行中,

方法结束后将状态改为false表示完成。所以按照eventloop的执行顺序,就会导致setState有时同步有时异步的情况。

React可以管理的入口都会命中batchUpdate机制。

transaction(事务)机制:

transaction 事务机制服务于batchUpdate 机制

6、组件渲染和更新过程

  (1)JSX渲染为页面过程

  定义props state

  解析JSX执行render()函数,生成vnode

  patch(elem,vnode),生成页面

  (2)setState 之后更新页面过程

  setState(newState) => dirtyComponents (可能有子组件)

  render() 生成 newVnode

  patch(vnode,newVnode)

7、更新的两个阶段

patch拆分成两个阶段:

  (1)reconciliation阶段:执行diff算法,纯JS计算

  (2)commit阶段:将diff结果渲染DOM

为什么会分成两个阶段?

如果不将patch拆分,可能会有性能问题。

因为JS是单线程,且和DOM渲染共用一个线程,当组件足够复杂,组件更新时计算和渲染压力都很大,

同时再有DOM操作需求(动画、拖拽等),可能会出现卡顿。

解决上面的性能问题进行拆分的具体解决方案是 fiber:

将 reconciliation 阶段进行任务拆分(commit无法拆分),

DOM需要渲染时暂停任务,空闲时恢复执行拆分的任务。

通过window.requestIdleCallback这个API来捕获DOM渲染时机,从而调配拆分的任务。但是该API有浏览器兼容限制。

面试真题:

1、React组件如何通讯

父子组件props

自定义事件

Redux 和 Context

2、JSX本质是什么

createElement函数

执行返回 vnode

3、context是什么,有何用途

父组件向下所有子孙组件传递信息,一些简单公共信息如主题色、语言等。复杂的公共信息用Redux

4、shouldComponentUpdate(SCU)的用途

性能优化,配合不可变值一起使用,否则会出错

5、描述redux单向数据流

(1)dispatch(action)

(2)reducer => newState

(3)subscribe 触发通知

6、setState是同步还是异步

setState主流程,batchUpdate机制。

7、什么时纯函数?

返回一个新值,没有副作用(不会修改其他值),重点就是不可变值。

8、函数组件和 class 组件的区别

函数组件:纯函数,输入props,输出JSX

没有实例,没有生命周期,没有state,不能扩展其他方法

9、什么是受控组件?

表单的值,受state控制,需要自行监听onChange,更新state

10、React 性能优化

渲染列表时加key

自定义事件、DOM事件及时销毁

合理使用异步组件

减少函数bind this的次数

合理使用 SCU、PureComponent 和 memo

合理使用 Immutable.js

webpack层面的优化,前端通用的性能优化

11、React 和 Vue 的区别

共同点:

都支持组件化

都是数据驱动视图

都是使用 vdom 操作 DOM

不同点:

React 使用 JSX 拥抱 JS,Vue 使用模板拥抱 html

React 函数式编程,Vue

本文链接地址:https://www.jiuchutong.com/zhishi/310328.html 转载请保留说明!

上一篇:万字详解JVM,让你一文吃透(jvm jmm)

下一篇:python实例创建销毁的函数整理(用python创建一个列表)

  • oppo账号实名认证怎么换绑(oppo账号实名认证怎么强制解除)

    oppo账号实名认证怎么换绑(oppo账号实名认证怎么强制解除)

  • c盘缓存文件夹在哪里(c盘缓存文件夹在哪里删除)

    c盘缓存文件夹在哪里(c盘缓存文件夹在哪里删除)

  • 华为荣耀20青春版芯片是什么(华为荣耀20青春版)

    华为荣耀20青春版芯片是什么(华为荣耀20青春版)

  • 华为手机wifi自动关闭怎么回事(华为手机wifi自动断开什么原因)

    华为手机wifi自动关闭怎么回事(华为手机wifi自动断开什么原因)

  • 华为p40pro开发者选项在哪里(华为p40pro开发者选项怎么设置)

    华为p40pro开发者选项在哪里(华为p40pro开发者选项怎么设置)

  • 微信群待办怎么发布(微信群待办怎么设置)

    微信群待办怎么发布(微信群待办怎么设置)

  • 华为nova7pro什么时候上市(华为nova7pro什么芯片)

    华为nova7pro什么时候上市(华为nova7pro什么芯片)

  • 小电会员怎么关闭(小电会员卡怎么取消)

    小电会员怎么关闭(小电会员卡怎么取消)

  • 一体机能换电池吗(一体机能换电池不)

    一体机能换电池吗(一体机能换电池不)

  • ipad版qq可以屏幕共享吗(ipad用qq不是全屏)

    ipad版qq可以屏幕共享吗(ipad用qq不是全屏)

  • 云米和小米是一个品牌吗(云米和小米是一个公司吗)

    云米和小米是一个品牌吗(云米和小米是一个公司吗)

  • excel怎么设置密码(excel怎么设置密码别人只读)

    excel怎么设置密码(excel怎么设置密码别人只读)

  • 手机电池容量3000够吗(手机电池容量3000)

    手机电池容量3000够吗(手机电池容量3000)

  • 苹果手机里没有手写输入法怎么办(苹果手机里没有照片却占很大内存)

    苹果手机里没有手写输入法怎么办(苹果手机里没有照片却占很大内存)

  • 哪些手机支持双频wifi(哪些手机支持双电信卡)

    哪些手机支持双频wifi(哪些手机支持双电信卡)

  • 华为9x怎么分屏(华为9x怎么分屏使用)

    华为9x怎么分屏(华为9x怎么分屏使用)

  • 蓝牙耳机怎样两个分开使用(蓝牙耳机怎样两个都响)

    蓝牙耳机怎样两个分开使用(蓝牙耳机怎样两个都响)

  • 手机信号e是什么意思(手机信号e是什么意思怎么办)

    手机信号e是什么意思(手机信号e是什么意思怎么办)

  • 拼多多怎么使用复活卡(拼多多怎么使用亲属卡)

    拼多多怎么使用复活卡(拼多多怎么使用亲属卡)

  • 荣耀笔记本怎么下载应用(荣耀笔记本怎么进入u盘启动)

    荣耀笔记本怎么下载应用(荣耀笔记本怎么进入u盘启动)

  • 怎么打开苹果闪付(怎么打开苹果闪光灯功能)

    怎么打开苹果闪付(怎么打开苹果闪光灯功能)

  • 小度在家699和299区别(小度在家系列哪个好)

    小度在家699和299区别(小度在家系列哪个好)

  • qq传输文件最大多少(qq传输文件最大支持多少)

    qq传输文件最大多少(qq传输文件最大支持多少)

  • 闲鱼怎么拉出黑名单(闲鱼怎么拉出黑名单的人)

    闲鱼怎么拉出黑名单(闲鱼怎么拉出黑名单的人)

  • qq语音通话创建失败怎么办(qq语音对话框怎么设置)

    qq语音通话创建失败怎么办(qq语音对话框怎么设置)

  • Win11/10系统怎么启用和配置SNMP服务?(windows 11怎么样)

    Win11/10系统怎么启用和配置SNMP服务?(windows 11怎么样)

  • 海关完税价格计算公式
  • 增值税税控系统技术维护费怎么做账
  • 如何查询个人所有贷款记录
  • 应收账款平均余额包括应收票据吗
  • 机械设备买回来怎么消毒
  • 电子发票可以更改备注吗
  • 如果零申报
  • 待认证进项税期末余额在贷方
  • 对外销售产品
  • 委托境外研发费用不超过境内符合条件的研发费用
  • 企业公益性捐赠支出税前扣除标准
  • 全资子公司改为独立公司
  • 本期已认证但不想抵扣申报表怎么填写
  • 期末应交企业所得税怎么算
  • 公允价值变动损益会计处理
  • 简易分包抵减的增值税应纳税额怎么做会计分录?
  • 银行手续费跨月怎么计算
  • 有限合伙企业对外转让财产份额
  • 增值税抵扣联是什么意思
  • 供应商不开票,还告我司不付款
  • 补充养老保险税前扣除政策
  • 在PDF里怎么将A4缩小转换为一半打印出来
  • 怎么查询财务章备案信息
  • 生产工具计入什么费用
  • 分公司开票信息
  • 收入与成本不匹配建议怎么写
  • win11最低硬件要求几代
  • 法人车无偿给公司使用合法吗
  • 税盘减免税款的会计分录
  • 附加税要先计提再支付吗
  • 苹果取消macbook
  • php教程100
  • 如何利用http协议发布博客园博文评论
  • 融资a轮之前
  • 固定资产清理损失可以税前扣除吗
  • 海运发票模板
  • 企业实行股权激励的作用
  • Yii2.0小部件GridView(两表联查/搜索/分页)功能的实现代码
  • 精灵烟囱的形态判断
  • php签到功能思路
  • 广告费可以结转几年扣除
  • 体验了一回
  • mkfifo命令
  • 非财政补助结转是什么类科目
  • 非流动资产处置计入什么科目
  • 材料暂估入库的依据有哪些
  • SQLserver数据库的while附近有语法错误,应为AS
  • percona-toolkit对MySQL的复制和监控类操作教程
  • mongodb如何修改数据
  • 小微企业0税务报税流程
  • 资产减值损失的借贷方向
  • sql server中事务有哪三种语句
  • 企业所得税税前扣除管理办法2018
  • 内账税金如何做分录
  • 一般纳税人增值税申报操作流程
  • 交增值税如何计算
  • 个体工商户和小规模纳税人的区别
  • 合并报表怎么合并
  • 融资租入的设备怎么入账
  • 计入固定资产的条件
  • mysql隔离级别详解
  • windowsxp不能启动怎么修复
  • avgorange是什么文件夹
  • win10预览版21337
  • retail版win10
  • js array数组
  • Android---60---Notification 通知栏的简单使用
  • docker save -o
  • 自动返回主页
  • python常见算法
  • centos7如何分区
  • 安卓里面怎么调用方法
  • python制作windows安装程序
  • nodejs登录成功跳转
  • bash: /usr/bin/autocrorder: /usr/bin/python^M: bad interpreter: No such file or directory
  • 利用python中的scikit-learn对疫情数据挖掘
  • javascript语言入门教程
  • 土地增值税清算时间要求
  • 农村报账员的基本职责
  • 百旺税控盘口令是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设