3.8投的内推,3.9约面试,问题都比较基础,但我还是太菜了/(ㄒoㄒ)/~~
问题:
- 自我介绍 -> react侧重
- 用过哪些常用的hooks
- useEffect的使用场景
- class里面的componentDidMount迁移到useEffect要怎么使用(useEffect如何使用)
- useEffect会重复执行怎么办
- class中的setState和function里面setState有什么区别
- class中的setState的第二个参数有什么用
- 在function里面如何获取setState最新的值
- 如何用useState包装实现class中的setState的第二个参数
- JS的基本数据类型和引用数据类型有哪些
- 判断数据类型的方式
- instanceof的实现原理
- ——> 手写instanceof
- 说一下你对Promise的理解
- 说一下Promise如何进行状态的转变 和 Promise的链式调用
- ——>手写实现 Promise.all 方法
- ——>手写树状结构的展平
const entry = [{
id: '1',
isOpen: true
}, {
id: '2',
children: [{
id: '21',
children: [{
id: '211',
isOpen: true
}, {
id: '212',
isOpen: false
}]
}]
}, {
id: '3',
isOpen: false
}]
function flatObj(arr){}
// 平铺,如果有isOpen属性则直接输出,如果没有则查看children里面有没有
// 只要children里面有一个true,那么外层就是true
// 输出 {'1':true, '2':true, '21':true, '211':true, '212':false, '3':false}
答案(挑不会的,重点的):
1.使用useState时,如何获得state最新的值
(1)使用useEffect代替原本class中setState的第二个参数(回调函数)来获取最新的值 (2)在setState传入一个函数,在函数内部修改前就拿到修改后的值
2.在setState中,批量更新所带来的问题
function App() {
const [counter, setCounter] = useState(0);
const handleClick = () => {
setCounter(counter + 1)
setCounter(counter + 1)
setCounter(counter + 1)
}
useEffect(() => {
console.log(counter);
}, [counter])
return <div style={{ padding: 30 }}>
<button onClick={handleClick}>click</button>
<div>{counter}</div>
</div>
}
点一次只加1,而不是加三,这是因为我们三次运行时,拿到的都是counter=0,没有拿到上一次运行结束的最新值,因此,只加了1
解决方法:
使用函数式setState(无论是class中还是在hooks中都一样)
function App() {
const [counter, setCounter] = useState(0);
const handleClick = () => {
setCounter(counter => counter + 1)
setCounter(counter => counter + 1)
setCounter(counter => counter + 1)
}
useEffect(() => {
console.log(counter);
}, [counter])
return <div style={{ padding: 30 }}>
<button onClick={handleClick}>click</button>
<div>{counter}</div>
</div>
}
总结:
还是要加强基础,多看原理,今天起把原理都手写十遍!!!