支持多项选择的有状态复选框

ReactReactBeginner
立即练习

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

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

简介

在本实验中,我们将学习如何使用 React 创建一个支持多项选择的有状态复选框。本实验将指导你完成呈现复选框列表、更新其状态以及使用回调函数将选定的值传递给父组件的过程。在本实验结束时,你将能够创建一个可在任何 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/FundamentalsGroup -.-> react/list_keys("Lists and Keys") react/AdvancedConceptsGroup -.-> react/hooks("React Hooks") react/StateManagementGroup -.-> react/use_state_reducer("Using useState and useReducer") subgraph Lab Skills react/jsx -.-> lab-38357{{"支持多项选择的有状态复选框"}} react/event_handling -.-> lab-38357{{"支持多项选择的有状态复选框"}} react/list_keys -.-> lab-38357{{"支持多项选择的有状态复选框"}} react/hooks -.-> lab-38357{{"支持多项选择的有状态复选框"}} react/use_state_reducer -.-> lab-38357{{"支持多项选择的有状态复选框"}} end

支持多项选择的有状态复选框

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

这段代码呈现了一个复选框列表,并使用回调函数将选定的值发送到父组件。以下是创建它的步骤:

  1. 使用 useState() 钩子,用 options 属性初始化 data 状态变量。
  2. 创建一个 toggle 函数,用选定的选项更新 data 状态变量,并使用它们调用 onChange 回调函数。
  3. 映射 data 状态变量,以生成各个复选框及其标签。将 toggle 函数绑定到每个复选框的 onClick 处理程序。
const MultiselectCheckbox = ({ options, onChange }) => {
  const [data, setData] = React.useState(options);

  const toggle = (index) => {
    const newData = [...data];
    newData[index] = {
      ...newData[index],
      checked: !newData[index].checked
    };
    setData(newData);
    onChange(newData.filter((item) => item.checked));
  };

  return (
    <>
      {data.map((item, index) => (
        <label key={item.label}>
          <input
            type="checkbox"
            checked={item.checked || false}
            onChange={() => toggle(index)}
          />
          {item.label}
        </label>
      ))}
    </>
  );
};

以下是使用它的示例:

const options = [{ label: "Item One" }, { label: "Item Two" }];

ReactDOM.createRoot(document.getElementById("root")).render(
  <MultiselectCheckbox
    options={options}
    onChange={(selected) => {
      console.log(selected);
    }}
  />
);

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

总结

恭喜你!你已经完成了“支持多项选择的有状态复选框”实验。你可以在 LabEx 中练习更多实验来提升你的技能。