React useDefault 钩子

ReactReactBeginner
立即练习

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

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

简介

在本实验中,我们将探索如何在 React 中创建一个名为 useDefault 的自定义钩子。这个钩子的目的是创建一个有状态的值,如果它是 nullundefined,则有一个默认的回退值,以及一个更新它的函数。在实验结束时,你将更好地理解如何使用自定义钩子来简化你的 React 代码并使其更高效。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL react(("React")) -.-> react/StateManagementGroup(["State Management"]) react(("React")) -.-> react/FundamentalsGroup(["Fundamentals"]) react(("React")) -.-> react/AdvancedConceptsGroup(["Advanced Concepts"]) 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-38379{{"React useDefault 钩子"}} react/event_handling -.-> lab-38379{{"React useDefault 钩子"}} react/hooks -.-> lab-38379{{"React useDefault 钩子"}} react/use_state_reducer -.-> lab-38379{{"React useDefault 钩子"}} end

React useDefault 钩子

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

以下是代码:

const useDefault = (defaultState, initialState) => {
  const [value, setValue] = React.useState(initialState);
  const isEmpty = value === undefined || value === null;
  return [isEmpty ? defaultState : value, setValue];
};
const UserCard = () => {
  const [user, setUser] = useDefault({ name: "Adam" }, { name: "John" });

  return (
    <>
      <div>User: {user.name}</div>
      <input onChange={(e) => setUser({ name: e.target.value })} />
      <button onClick={() => setUser(null)}>Clear</button>
    </>
  );
};

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

要创建一个带有默认回退值的有状态值,请在 React 中使用 useState() 钩子。检查初始值是否为 nullundefined。如果是,则返回 defaultState,否则返回实际的 value 状态和 setValue 函数。上面的代码展示了如何在一个名为 useDefault 的自定义钩子中实现此功能。

在提供的示例中,useDefault 用于创建一个默认值为 { name: 'Adam' }user 状态。初始状态设置为 { name: 'John' }。在 UserCard 组件中,显示 user 以及一个用于更新其名称的输入字段。还提供了一个清除按钮,用于将状态重置为 null。最后,使用 ReactDOM.createRoot() 渲染组件。

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

总结

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