虚心请教,这样的 React 面试题目是否合理?

2022-07-08 10:55:05 +08:00
 w4ngzhen

各位真大佬,鄙人最近在面试 React 初 /中级,请问一下这个问题是否合理?

// 按钮挂载后,10 秒点击按钮 N 次,打印的效果?
const [count, setCount] = useState(0)
useEffect(() => { 
    setTimeout(() => {  
      console.log(count);
    }, 10 * 1000 )
 }, []);
<button onClick={() => setCount(count + 1)} />

个人感觉这个问题还是会考察候选人对 React 、React 的 useEffect 理解,不知道各位大佬怎么看?

6201 次点击
所在节点    React
51 条回复
darkengine
2022-07-08 17:30:21 +08:00
短短几行代码,包含了很多坑,用来考核挺好的
XTTX
2022-07-08 17:34:12 +08:00
除非想读十秒前的值, 不然需要用 ref.current 更新到最新的。 我觉得挺经典的一道题。
yuuko
2022-07-08 18:33:41 +08:00
React hook 的最大缺点就是对用户来说不直观,心智负担不小,所以还是 solidjs 更胜一筹
h1104350235
2022-07-08 18:35:04 +08:00
有大佬解释下吗
wenbinwu
2022-07-08 19:02:11 +08:00
如果有公司让你看代码说结果,就不用去这种公司了
dtdths1
2022-07-08 19:23:09 +08:00
但凡是写过 react hooks 的,应该都知道吧
damngoto
2022-07-08 19:44:10 +08:00
@h1104350235 装个 EsLint 插件就不会犯错了。依赖加上去。

useEffect(() => {
setTimeout(() => {
console.log(count);
}, 10 * 1000);
}, [count]);
qfdk
2022-07-08 19:47:36 +08:00
@gdrk 感谢送上 回家地铁阅读理解➕1
rabbbit
2022-07-08 19:56:42 +08:00
useEffect(() => {}, []) 只会在挂载时调用, 所以打出 来的都是 0
解决办法是使用 useRef
感觉 hook 限制顺序还是写着难受, 带着镣铐的舞蹈
zhouyg
2022-07-08 22:40:09 +08:00
这个面试题可以
mufeng
2022-07-09 00:38:21 +08:00
@rabbbit useRef 不会 re-render ,这个题还可以考察一下 re-render 怎么处理,useCallback 使用
ericls
2022-07-09 00:43:45 +08:00
非常不合理 代码是给电脑跑的
mara1
2022-07-09 01:22:04 +08:00
我不想做这种题,但遇到的面试许多这样的,接受不能改变的,改变能改变的。

我改变自己,我选择转行。
Exuanbo
2022-07-09 05:52:10 +08:00
这不是很基础的东西吗...
okampfer
2022-07-09 10:01:52 +08:00
挺不错的题,也是挺基础的题。正好下周有个面试,就用这道题考考候选人。

还有一个点我觉得可以考一下,就是 setCount 有没有更安全的调用方式,就是 setCount(prevCount => prevCount + 1) 。

不过各位我有个疑问,https://codesandbox.io/s/react-interview-increment-useeffect-g4r99j?file=/src/App.tsx ,我加了一个 useEffect 并依赖于 countRef.current ,我点 increment 了之后居然输出了 countRef.current 的最新值?!不是说更新 ref 不会触发重新渲染吗?

说起来我觉得即使有经验的 React 开发都可能会偶尔懵逼犯这些低级错误,React 在心智负担这点上面确实不如 Vue 、solidjs 有优势。

很高兴有人提到 solidjs ,就是生态还不行得等。
looking0truth
2022-07-09 10:28:52 +08:00
@okampfer 因为你的 setCount 触发的 rerender 啊
gydi
2022-07-09 10:30:53 +08:00
@okampfer ref 不会变,ref.current 会,你改成依赖 ref 试试
okampfer
2022-07-09 10:40:17 +08:00
@looking0truth #36 不是这个原因,那个 useEffect 没有依赖 count 。
@gydi #37 改成依赖 countRef 就只输出一次了。
gydi
2022-07-09 10:45:33 +08:00
@okampfer 你之前的代码里点击触发 rerender 是因为 setcount 了,不是因为 ref current 的值变了
MrBrother
2022-07-09 11:55:38 +08:00
@westoy #20

移动端不支持,电脑上可以

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/864871

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX