React最全面试题(持续更新)

1、react生命周期及相关用法


react生命周期分为初始化阶段、运行阶段、销毁阶段。

(1) 初始化阶段:

componentWillMount:实例挂载之前
Render:渲染组件
componentDidMount:实例挂载完成。一般在这个函数中与后台进行初始化数据交互。

(2)运行阶段:

componentWillReceiveProps:父组件改变时调用。
sholudComponentUpdate:主要是用来手动阻止组件渲染,一般在这个函数中做组件的性能优化。
componentWillUpdate:组件数据更新前调用
componentDidUpdate:组件数据更新完成时调用

(3)销毁阶段:

componentUnmount:销毁阶段。一般用来销毁不用的变量或者是解除无用定时器以及解绑无用事件。防止内存泄漏问题。

2、React运行阶段生命周期调用顺序

componentWillReceiveProps–>shouldComponentUpdate --> componentWillupdate --> componentDidUpdate

3、react中key的作用

key是React中用于追踪哪些列表中元素被修改、删除或者被添加的辅助标识。在diff算法中,key用来判断该元素节点是被移动过来的还是新创建的元素,减少不必要的元素重复渲染。

4、setState第二个参数的作用

因为setState是一个异步的过程,所以说执行完setState之后不能立刻更改state里面的值。如果需要对state数据更改监听,setState提供第二个参数,就是用来监听state里面数据的更改,当数据更改完成,调用回调函数。

5、sass和less的区别

定义变量的符号不同,less是用@,sass使用$
变量的作用域不同,less在全局定义,就作用在全局,在代码块中定义,就作用于整哥代码块。而sass只作用域全局。
编译环境不同,less在开发者环境编译,sass在服务器环境下编译。

6、vue和react的区别

1、react严格上针对的是mvc模式的view层,vue则是mvvm模式。
2、操作dom的方式不同,vue使用的是指令操作dom,react是通过js进行操作。
3、数据绑定不同,vue实现的是双向绑定,react的数据流动是单向的。
4、react中state是不能直接改变的,需要使用setState改变。vue中的state不是必须的,数据主要是由data属性在vue对象中管理的。

7、react中的高阶函数

高阶函数就是一个纯js且没有副作用的函数。
高阶组件就是一个函数,且该函数接受一个组件作为参数,并返回一个新的组件。
相关资料:https://blog.csdn.net/baidu_38151187/article/details/79884613

8、react生命周期中,最适合与服务端进行数据交互的是哪个函数

componentDidMount:在这个阶段,实例和dom已经挂载完成,可以进行相关的dom操作。

9、react中组件传值

父传子(组件嵌套浅):父组件定义一个属性,子组件通过this.props接收。
子传父:父组件定义一个属性,并将一个回调函数赋值给定义的属性,然后子组件进行调用传过来的函数,并将参数传进去,在父组件的回调函数中即可获得子组件传过来的值。

10、react性能优化阶段函数是哪一个?

shouldComponentUpdate

11、react性能优化的方案

(1)重写shouldComponentUpdate来避免不必要的dom操作。
(2)使用 production 版本的react.js。
(3)使用key来帮助React识别列表中所有子组件的最小变化。

12、介绍一下webpack

webpack是一个前端模块化打包工具,主要由入口,出口,loader,plugins四个部分。前端的打包工具还有一个gulp,不过gulp侧重于前端开发的过程,而webpack侧重于模块,例如他会将css文件看作一个模块,通过css-loader将css打包成符合css的静态资源。

13、Es6中箭头函数与普通函数的区别?

1.普通function的声明在变量提升中是最高的,箭头函数没有函数提升
2.箭头函数没有this,arguments
3.箭头函数不能作为构造函数,不能被new,没有property,
4.call和apply方法只有参数,没有作用域

14、什么是闭包?闭包有什么危害?如何解决闭包带来的危害?

简单来说,闭包就是一个定义在函数内部的函数。因为js中存在作用域的问题,所以在函数内部定义的变量在函数外部是没有办法直接获取到。而闭包就是沟通函数内部和外部的桥梁,这样在函数外部接可以得到函数内部的值。并且闭包可以实现函数属性和方法的私有化。

闭包的危害:

因为闭包会将内部变量储存在内存中,如果长时间不清除的话会造成内存泄漏的问题,影响程序的性能。
解决方法:对于不使用的变量及时的清除。
 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
React Native的自建热更新功能是指开发者自行实现热更新功能,而不使用第三方提供的热更新服务。下面将简单介绍实现自建热更新的一般步骤。 首先,需要创建一个服务器来存放热更新的文件。可以使用云存储服务,如AWS S3、阿里云OSS等,也可以自行搭建服务器存储文件。 其次,需要在React Native应用中添加热更新的逻辑。一般情况下,热更新需要通过下载文件来替换原有的文件。可以使用React Native提供的`fetch` API来下载热更新文件,然后使用文件操作相关的API来替换原文件。 在App启动时,可以通过向服务器请求版本号等信息来判断是否需要进行热更新。当发现需要更新时,App会向服务器请求热更新文件的下载链接。下载完成后,可以通过解压文件或者其他方式来获取到热更新包内的文件。然后使用文件操作相关的API,将这些文件替换到React Native应用相应的目录中。 最后,可以在App中增加一些逻辑,比如通过热更新版本号来判断是否需要强制更新、增加热更新的错误处理等。 需要注意的是,在实现自建热更新功能时,还需要考虑到热更新文件的校验、下载进度显示、热更新中断恢复等问题。此外,还需要兼容不同平台(Android和iOS)的热更新需求。 综上所述,实现自建热更新需要创建服务器存储更新文件,并在React Native应用中添加热更新的逻辑,包括判断是否需要更新、下载热更新文件、替换文件等步骤。同时,还需要考虑一些额外功能的实现和平台兼容性的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南北极之间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值