老师,关于useRef的一个疑问
来源:9-4 添加上下文菜单第二部分

zozo_zuo
2019-09-14
课程里的useContextMenu
中的clickedElement
使用useRef
保存了对元素的引用,然后将clickedElement
进行了返回,在FileList.js
中点击菜单可以打印出clickedElement
但是如果将clickedElement.current
(就改这里了)返回,那么就总是会得到null
,除非使用文件改名称或者删除等操作,使FileList
组件重新渲染,才能得到上次点击的element
?
这里非常不解,为什么会出现这种现象?
截图:
更改前
useContextMenu
FileList.js
输出结果
更改后
useContextMenu
FileList.js
没有变化,和之前一样
输出结果
写回答
1回答
-
你好同学 useRef 返回的对象一般不会把 current 拿出来单独使用,现在我们分析一下,你这段代码的问题在哪里,你可以额把 useRef 返回的内容想象成一个简单的 object,比如说
let ref = { current: null }
然后你直接返回了 ref.current 这时候就等于把一个 immutable 的值 null 直接返回了,那么当然,每次再怎么修改 ref ,这个值都不会改变了。
012019-09-15
相似问题