老师,关于useRef的一个疑问

来源:9-4 添加上下文菜单第二部分

zozo_zuo

2019-09-14

图片描述
课程里的useContextMenu中的clickedElement使用useRef保存了对元素的引用,然后将clickedElement进行了返回,在FileList.js中点击菜单可以打印出clickedElement

但是如果将clickedElement.current(就改这里了)返回,那么就总是会得到null,除非使用文件改名称或者删除等操作,使FileList组件重新渲染,才能得到上次点击的element

这里非常不解,为什么会出现这种现象?

截图:

更改前

useContextMenu
图片描述
FileList.js
图片描述
输出结果
图片描述

更改后

useContextMenu
useContextMenu
FileList.js
没有变化,和之前一样
输出结果
图片描述

写回答

1回答

张轩

2019-09-15

你好同学 useRef 返回的对象一般不会把 current 拿出来单独使用,现在我们分析一下,你这段代码的问题在哪里,你可以额把 useRef 返回的内容想象成一个简单的 object,比如说

let ref = {
    current: null
}

然后你直接返回了 ref.current 这时候就等于把一个 immutable 的值 null 直接返回了,那么当然,每次再怎么修改 ref ,这个值都不会改变了。

0
1
zozo_zuo
非常感谢!
2019-09-15
共1条回复

2024更新 Electron+React+七牛云实战跨平台桌面应用

开发一款自动云同步的 Markdown 文件管理软件

1254 学习 · 463 问题

查看课程