在异步回调中卸载和useState

时间:2020-11-01 16:19:27

标签: reactjs

在React FC中,直接在异步回调内部获取反模式吗?

在组件卸载后将setState称为 可以吗?

const Component = () => {
  const [state, setState] = useState("");

  const onClick = e => {
    // What if the component unmounts before setState?
    fetch("url").then(response => response.json()).then(json => setState(json))
  }
  return <button onClick={onClick}></button>
}

1 个答案:

答案 0 :(得分:2)

如果需要在安装组件时调用api并获取数据,请使用useEffect

如果要在onClick事件上调用它,请使用useCallback

如果在setState之前卸载组件,它将不会破坏您的应用程序,但会在控制台中出现错误,因为在已卸载的组件中调用了set状态。 (可选)为避免这种情况,您可以在卸载组件时取消api调用。