-
react生命周期
- 挂载阶段
- constructor
- getDerivedStateFromProps
- render
- componentDidMount
- 更新阶段
- getDerivedStateFromProps
- shouldComponentUpdate
- render
- getSnapshotBeforeUpdate // 更新前快照, 它使得组件能在发生更改之前从 DOM 中捕获一些信息, 返回值将作为componentDidUpdate的第三个参数
- componentDidUpdate
- 移除
- componentWillUnmount
- 挂载阶段
-
你刚刚有提到 getDerivedStateFromProps,说一说为什么会有这个生命周期的出现,react设计它的意义在哪里
- state 的值任何时候都取决于 props
-
有用过ref吗,说一下什么是ref
- ref 提供一种允许访问DOM节点的方法, 脱离父子通信, 可以在数据流之外强行修改子组件。通常用来管理焦点,触发强制动画, 集成第三方的库
- ref 属性用于html元素时, 所创建的 ref 接收底层 DOM 元素作为其 current 属性
- ref 为class的时候, ref 接受组件的挂载实例作为其current的值
- 不能在函数组件上使用 ref 属性,因为函数组件没有实例。
-
有用 ref 传过参数吗, 比如传入一个函数
- 函数的第一个参数就是被ref的DOM, 函数组件可以用useCallBack包裹这个函数
-
useRef 的返回值是什么
- 一个可变的 ref 对象, 其中.current属性被初始化为传入的参数。 useRef不仅可以用于dom refs, 「ref」 对象是一个 current 属性可变且可以容纳任意值的通用容器,类似于一个 class 的实例属性。
-
请为所有数组对象添加一个findDuplicate(n)方法,用于返回该数组中出现频率>=n的元素列表
- Object.entries()/ Map.entries() 返回一个 Iterator 对象, 它按插入顺序包含了Map对象中每个元素的 [key, value] 数组。
-
我看到你有用map ,你说下map出现的原因是什么,它和对象有什么区别
-
Objects 和 Maps 类似的是,它们都允许你按键存取一个值、删除键、检测一个键是否绑定了值。因此(并且也没有其他内建的替代方式了)过去我们一直都把对象当成 Maps 使用。不过 Maps 和 Objects 有一些重要的区别,在下列情况里使用 Map 会是更好的选择:
-
一个Object的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值,包括函数、对象、基本类型。 Map 中的键值是有序的,而添加到对象中的键则不是。因此,当对它进行遍历时,Map 对象是按插入的顺序返回键值。 你可以通过 size 属性直接获取一个 Map 的键值对个数,而 Object 的键值对个数只能手动计算。 Map 可直接进行迭代,而 Object 的迭代需要先获取它的键数组,然后再进行迭代。 Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。虽然 ES5 开始可以用 map = Object.create(null) 来创建一个没有原型的对象,但是这种用法不太常见。 Map 在涉及频繁增删键值对的场景下会有些性能优势。
-
-
weakMap呢, 它有什么应用场景吗
-
在 JavaScript 里,map API 可以通过使其四个 API 方法共用两个数组(一个存放键,一个存放值)来实现。给这种 map 设置值时会同时将键和值添加到这两个数组的末尾。从而使得键和值的索引在两个数组中相对应。当从该 map 取值的时候,需要遍历所有的键,然后使用索引从存储值的数组中检索出相应的值。
-
但这样的实现会有两个很大的缺点,首先赋值和搜索操作都是 O(n) 的时间复杂度( n 是键值对的个数),因为这两个操作都需要遍历全部整个数组来进行匹配。另外一个缺点是可能会导致内存泄漏,因为数组会一直引用着每个键和值。这种引用使得垃圾回收算法不能回收处理他们,即使没有其他任何引用存在了。
-
相比之下,原生的 WeakMap 持有的是每个键对象的“弱引用”,这意味着在没有其他引用存在时垃圾回收能正确进行。原生 WeakMap 的结构是特殊且有效的,其用于映射的 key 只有在其没有被回收时才是有效的。
-
正由于这样的弱引用,WeakMap 的 key 是不可枚举的 (没有方法能给出所有的 key)。如果key 是可枚举的话,其列表将会受垃圾回收机制的影响,从而得到不确定的结果。因此,如果你想要这种类型对象的 key 值的列表,你应该使用 Map。
-
-
箭头函数中的 this 指谁
-
如何确定函数执行时的this 指向
-
call 和 apply 的区别
-
回答一下 fn.bind(obj1).apply(obj2) 中的this指谁
-
请你写一下bind函数的实现
-
说一下http常见响应头中包含了啥
- Allow / Content-Encoding/ Content-Length/ Content-Type/ Date/ Expires/ Last-Modified/ Location/ Refresh/ status/
-
git 常用命令
-
rebase 和 merge 的区别