【问题标题】:How to force update after dom change with react hooksdom更改后如何使用react hooks强制更新
【发布时间】:2020-07-29 19:11:59
【问题描述】:

我有一个渲染 svg 路径的组件,并希望在该路径的底部渲染另一个组件。路径组件看起来像这样。其中 {d} 来自一个数组,该数组被转换为 'M0,0,L100,120,L0,240'。

<svg>
  <path
    ref={pathRef}
    d={d}
    ...
  >
  </path>
</svg>

我有一种方法可以向该路径添加一个点。并且在渲染路径之后(domNode 的高度发生变化)我希望在底部渲染另一个组件。

在父级中我使用 useEffect() 来获取 pathRef.current.getBoundingClientRect().height;

但无论我做什么,我总是得到旧状态的高度。最终的 dom 更改似乎不会触发我的组件中的更新。

我错过了什么?我尝试了 useLayoutEffect(),我什至尝试在任何 useEffect 之外控制台记录当前高度,但我从未得到最新值。

【问题讨论】:

  • 我无法发表评论,所以我在这里问。在 useEffect 挂钩中检索状态后是否更新状态?
  • 你能展示你的useEffect吗?您可能需要将 d 作为依赖项添加到 useEffect

标签: javascript reactjs react-hooks use-effect


【解决方案1】:

Ciao,尝试将useStateuseCallback 挂钩结合使用。喜欢:

const [, updateComponent] = React.useState();
const forceUpdateComponent = React.useCallback(() => updateComponent({}), []);

然后,当您需要重新渲染时,只需调用 forceUpdateComponent()

【讨论】:

  • 但是我如何检查 forceUpdateComponent() 的时刻?完成所有更新后,我仍然有一个旧值可以进行任何比较。
  • 您可以尝试使用添加点到路径的相同方法。
  • 不像我向@Davia解释的那样
猜你喜欢
  • 2021-02-09
  • 2013-01-30
  • 2019-01-10
  • 1970-01-01
  • 2017-07-18
  • 2020-10-27
  • 2020-01-12
  • 2021-06-08
  • 2021-05-23
相关资源
最近更新 更多