useEffect 运行时是否保证设置 refs?

2024-02-08

我想在安装后设置音频元素的音量。

如果我在 DOM 节点上有一个没有条件渲染的引用,我可以依赖在第一个 useEffect 运行后定义的该引用的值吗?

function Component() {
  const ref = React.useRef();

  React.useEffect(() => {
    // Can ref.current ever be undefined here?
    ref.current.volume = 0.4;
  }, []);

  return <audio src="..." ref={ref} />
}

我见过很多人将 if 语句和 refs 的可选链接放入 useEffect 中。如果没有条件渲染,那还有必要吗?


refs已设置during https://beta.reactjs.org/learn/manipulating-the-dom-with-refs#when-react-attaches-the-refs 提交阶段:

React 在提交期间设置 ref.current。在更新 DOM 之前, React 将受影响的 ref.current 值设置为 null。更新后 DOM,React 立即将它们设置到相应的 DOM 节点。

And useEffect runs after https://reactjs.org/docs/hooks-reference.html#useeffect 提交阶段:

传递给 useEffect 的函数将在渲染完成后运行 致力于屏幕。将效果视为逃生口 React 的纯函数式世界进入了命令式世界。

所以假设你实际上在 UI 上渲染了该元素,ref.current应该指的是DOM节点内部的效果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

useEffect 运行时是否保证设置 refs? 的相关文章

随机推荐