React useError 钩子

ReactReactBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将学习如何使用 React 中的 useError 钩子创建一个错误调度器。该钩子允许我们创建一个状态变量来保存错误,并在其为真值时抛出它。我们还将使用 useCallback 钩子来更新状态并返回缓存的函数。在本实验结束时,你将能够在 React 应用程序中有效地处理错误。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL react(("React")) -.-> react/AdvancedConceptsGroup(["Advanced Concepts"]) react(("React")) -.-> react/StateManagementGroup(["State Management"]) react(("React")) -.-> react/FundamentalsGroup(["Fundamentals"]) react/FundamentalsGroup -.-> react/jsx("JSX") react/FundamentalsGroup -.-> react/event_handling("Handling Events") react/AdvancedConceptsGroup -.-> react/hooks("React Hooks") react/StateManagementGroup -.-> react/use_state_reducer("Using useState and useReducer") subgraph Lab Skills react/jsx -.-> lab-38382{{"React useError 钩子"}} react/event_handling -.-> lab-38382{{"React useError 钩子"}} react/hooks -.-> lab-38382{{"React useError 钩子"}} react/use_state_reducer -.-> lab-38382{{"React useError 钩子"}} end

React useError 钩子

虚拟机中已提供了 index.htmlscript.js。一般来说,你只需在 script.jsstyle.css 中添加代码。

这段代码创建了一个错误调度器。它使用三个 React 钩子来管理错误状态并将其分派到用户界面。

代码的工作原理如下:

  1. useState() 钩子创建一个名为 error 的状态变量,用于保存错误对象。它接受一个初始值 err,该值作为参数传递给钩子。

  2. useEffect() 钩子用于在错误为真值时 “抛出” 错误。这个钩子接受一个函数和一个依赖项数组作为参数。在这种情况下,函数会检查 error 状态变量是否为真值(即不为 null、undefined、0、false 或空字符串),如果是则抛出它。依赖项数组是 [error],这意味着每当 error 变量发生变化时,该副作用都会重新运行。

  3. useCallback() 钩子用于创建一个名为 dispatchError 的缓存函数,该函数更新 error 状态变量并返回新函数。这个钩子接受一个函数和一个依赖项数组作为参数。在这种情况下,函数接受一个参数 err,它是要分派的新错误对象。依赖项数组是 [],这意味着只有在组件重新渲染时才会重新创建缓存函数。

以下是在组件中使用 useError() 钩子的示例:

  1. 创建一个名为 ErrorButton 的新组件。

  2. 在组件内部,调用 useError() 钩子以获取 dispatchError 函数。

  3. 创建一个名为 clickHandler 的点击处理函数,该函数使用新的错误对象调用 dispatchError

  4. 渲染一个按钮,点击时调用 clickHandler

以下是代码:

const useError = (err = null) => {
  const [error, setError] = React.useState(err);

  React.useEffect(() => {
    if (error) {
      throw error;
    }
  }, [error]);

  const dispatchError = React.useCallback((err) => {
    setError(err);
  }, []);

  return dispatchError;
};

const ErrorButton = () => {
  const dispatchError = useError();

  const clickHandler = () => {
    dispatchError(new Error("Error!"));
  };

  return <button onClick={clickHandler}>Throw error</button>;
};

ReactDOM.createRoot(document.getElementById("root")).render(<ErrorButton />);

请点击右下角的 “Go Live” 以在端口 8080 上运行 Web 服务。然后,你可以刷新 “Web 8080” 标签页来预览网页。

总结

恭喜你!你已经完成了 React useError 钩子实验。你可以在 LabEx 中练习更多实验来提升你的技能。