react面试题

https://blog.csdn.net/kellywong/article/details/106430977

一,react hooks组件传值

1,父传子:通过props传值

2,子传父:子组件通过 父组件传递的事件newList,把值传给父组件

3,通过ref元素的引用来传值

4,跨级传递:使用useContext来传值

hooks的优缺点

解决类组件的代码复杂,复杂的this指向,bing绑定;复杂的生命周期,代码冗余

react hooks钩子:

1,useState(),状态钩子,定义变量用

2,useEffect(),副作用钩子,用来清除副作用,数据请求,代替生命周期,修改dom, 销毁定时器

[]依赖什么值来触发,空就是依赖自己

3,useContext(Value); 解决父子组件传值的问题

4,useReducer() 状态共享 相当于redux

5,useMemo() 解决组件重复执行问题, :父组件a值改变的时候,子组件b才会更新

6,useRef() 获取DOM, 保存变量

hooks的生命周期

它能让组件在不使用 class 的情况下拥有 state,所以就有了生命周期的概念,所谓的生命周期其实就是 useStateuseEffect()useLayoutEffect()

1,vue mixin怎么写的,有什么用,vue mixin react相似的功能是哪个

vue的mixin(混合)就是混合代码,合并代码

分为全局合并,基础options合并

https://blog.csdn.net/qq_27460969/article/details/88688073

react可以通过高阶组件(Higher Order Components--HOC)来扩展,而vue需要通过mixins来扩展

1,vue之mixin混入偷懒技术

mixin:实现vue组件中的可复用功能

https://www.cnblogs.com/shannen/p/13968418.html

2,vue的slot插糟有什么作用,react那个有相似功能

在vue中,引入的子组件标签中间是不允许写内容的。为了解决这个问题,官方引入了插槽(slot)的概念。

作用是为了方便给子组件传入html,假如一个场景,有5个页面,这5个页面只有一个区域的内容不一样,你会怎么去写这个5个页面,复制粘贴是一种,在vue中插槽(slot)是更好的做法。

2.1,react组合,实现vue插槽功能

通过一个方法传入不同的参数,调用这个方法,然后把子组件当参数传进去,传入不同的子组件就显示不同html

https://blog.csdn.net/qq_42813491/article/details/95945025

3,js面相对象的继承有哪些方法

https://www.cnblogs.com/gaosirs/p/10637609.html

4,面向对象怎么实现重写,重载

5,js怎么实现父方法一个参数调用一个方法,2个参数调用另外一个方法

6,自己实现过hooks吗

自定义 Hook 是一个函数,其名称以 “use” 开头,函数内部可以调用其他的 Hook。封装一些逻辑的函数,可以复用减少代码冗余

6.1,用于处理字符串(url)

6.2,数据格式化(日期)

6.3,业务逻辑性

https://www.cnblogs.com/xm0328/p/14421516.html

7,数据类型:

JS数据类型:JS的基本类型和引用类型

基本类型(单类型):除Object。 String、Number、boolean、null、undefined。

引用类型:object。里面包含的 function、Array、Date。

https://blog.csdn.net/u013592575/article/details/95087953

null 和 undefined 有什么区别

undefined 是没有定义的,没有初始化,,null 是定义了但是为空,是不存在的对象。

判断数据类型:

typeof 不适合数组和对象,和 null

instanceof 在判断数组和Data很好用

Object.prototype.toString 可以判断基本类型和数组

二,

1,什么叫事件冒泡,事件捕获

2,vue合成事件和原生事件有什么区别

vue diff和react diff有什么不同

vue mixin优劣和替代方案

vue2.0和3.0的区别,3.0的优势

vue自定义指令及原理

vue-devtools应用

什么是依赖注入

react新版生命周期及hooks实现方式

介绍下redux

BFC是什么,有什么用,如何实现

如何实现12px以下字体

如何优化scale模糊

css原子化实现及优劣

2,vue合成事件和原生事件有什么区别

合成事件机制:React并不是将click事件直接绑定在dom上面,而是采用事件冒泡的形式冒泡到document上面

在document处监听所有支持的事件,将事件内容封装交给中间层(负责所有事件合成)

https://www.yuque.com/dahai-gyz0e/tqybqc/asitqp

https://www.yuque.com/dahai-gyz0e/tqybqc/mgb7h6

3,vue diff算法

用 Js 对象结构表示 DOM 树的结构;然后用这个树构建一个真正的 DOM 树,插到文档当中

当状态变更的时候,重新构造一棵新的对象树。然后用新的树和旧的树进行比较(diff),记录两棵树差异

把差异的部分构建的真正的DOM树上(patch),视图就更新了

diff算法是通过对同层的树节点进行比较,这样复杂度就很低

4,vue mixin优劣和替代方案

混入 (mixin) 提供了一种非常灵活的方式,来混入其它js和组件,减少代码冗余,提高可复用性

其它方案:比如说高阶组件就允许你组合相似函数,Mixin只是的一种实现方式。

5,vue2.0和3.0的区别,3.0的优势

重构了响应系统:使用代理替换object.defineProperty

可以直接监听数组类型的数据变化,

重构了虚拟dom,代码结构调整体积更小

6,虚拟dom

用js对象为基础来模拟原生dom结构,包含真实的dom信息.

因为操作原生dom慢,js运行效率高,将DOM对比操作放在JS层,提高效率。

虚拟dom本质上就是在 JS 和 DOM 之间做了一个缓存。提升渲染性能

7,vue自定义指令及原理

vue.directive 定义一个指令 钩子函数:bind,inserted定义指令的功能

8,什么是依赖注入

它的目的是将组件与它们当前的组织方式耦合起来,通过他可以向子孙组件传递数据,相当于加强版的props

https://www.jianshu.com/p/6651dccd282c

9,react新版生命周期及hooks实现方式

10,介绍下redux

9.1,js判断对象类型

typeof 判断对象和数组都返回object,因此它无法区分对象和数组

toString.call()判断最全

https://www.cnblogs.com/sunmarvell/p/9386075.html

9.2,判断对象是否为空

var arr = Object.keys(data);
alert(arr.length == 0); //true 为空, false 不为空
var b = (JSON.stringify(data) == "{}");
alert(b);   //true 为空, false 不为空

ES6的高阶函数

//新的写法: filter / map / reduce
    // filter中的回调函数有一个要求:必须返回一个bollean值
        // true : 当返回true时,函数内部会自动将这次回调的n加入到新的数组中
        // false: 当返回fasle时,函数内部会过滤掉这次的n。
        let new_nums = nums.filter(function (n) {
            return n < 100
        })

    // map 映射函数
        let new_nums1 = new_nums.map(function (n) {
            return n * 3
        })

    // reduce(func(上一次结果 初始值为默认值,数组的n),默认值=0) 对数组中所有的内容进行汇总。
        let new_nums2 = new_nums1.reduce(function (prev,n){
            return prev + n
        },0)

//或者可以写成
    let new_writeNums = nums.filter(function (n){return n < 100}).map(function(n){return n * 3}).reduce(function(prev,n){return prev + n},0)

11,BFC是什么,有什么用,如何实现

BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,

作用:清除浮动,实现自适应布局

12,如何实现12px以下字体

使用transform: scale(.95) 使用图片

13,如何优化scale模糊

给缩放代码加上transform:translate3d(0,0,0)

14,css原子化实现及优劣

就是定义很多css变量,去元素的class去拼凑

可以直接修改 HTML 属性而不用修改 CSS,改变最终渲染的效果

面试方法和个人成长

https://lengyuexin.blog.csdn.net/article/details/112707033

https://www.imooc.com/article/317596

https://www.kancloud.cn/pwstrick/fe-questions/2139313

https://new.qq.com/omn/20210614/20210614A0480500.html

https://www.zhihu.com/question/441574562

https://www.zhihu.com/question/51578243/answer/1696365717

因为不够勇敢错失过什么

https://www.douban.com/gallery/topic/308797/?from=discussing&target_user_id=

生活中的“I”时刻

https://www.douban.com/gallery/topic/346273/?from=discussing&target_user_id=

你如何维持情绪稳定

https://www.cnblogs.com/xiao2shiqi/p/15401920.html

实习生转正:https://www.cnblogs.com/thisiswhy/p/15420053.html

年终总结:https://www.cnblogs.com/netxiaohui/p/10205132.html