javascript - 如何在 refs 更改时重新渲染
问题描述
代码:
import DrawControl from "react-mapbox-gl-draw";
export default function MapboxGLMap() {
let drawControl = null
return(
<DrawControl ref={DrawControl => {drawControl = DrawControl}}/>
)
}
我想在drawControl
非空时加载数据。我检查了可能使用回调参考的文档。
那么,如何监听drawControl
变化并加载数据呢?
解决方案
如果要在 ref 更改后触发重新渲染,则必须使用useState
而不是useRef
. 只有这样才能确保组件会重新渲染。例如:
function Component() {
const [ref, setRef] = useState();
return <div ref={newRef => setRef(newRef)} />
}
如useRef文档中所述:
请记住,
useRef
它不会在其内容发生更改时通知您。改变.current
属性不会导致重新渲染。如果你想在 React 将 ref 附加或分离到 DOM 节点时运行一些代码,你可能需要使用回调 ref来代替。
有时最好存储您从 DOM 节点获得的任何值,如此处所建议的,而不是存储节点本身。
推荐阅读
- android - 如何在 android xml 中创建下面的 UI?
- c# - 更改子类的覆盖属性的 XML 元素时出错
- javascript - 设置空的服务器时间戳,然后给它们一个值,在 Angular firestore 上是否可能?
- c# - ZPL 批次上的 GS1 代码条
- elasticsearch - 在 `should` 中结合 `term` 和 `match`
- java - 创建一个接受 Object 或 PrimitiveType 作为参数的构造函数,然后创建相应的列表?
- python - 如何打印到 excel/csv?
- javascript - 列出锁定文件中依赖项的所有依赖项
- javascript - 使用 window.history.replaceState 存储会话 ID 是否安全?
- sql - 有没有办法在 PostgreSQL 中以不同的方式一次更新/修改多行?