【发布时间】:2021-04-07 21:51:04
【问题描述】:
我正在尝试制作一个Checkbox 组件。
这是我的Checkbox.tsx。
import React from "react";
import * as S from "./style";
const Checkbox: React.FC<S.ICheckboxProps> = ({ checked, setChecked }) => {
return <S.StyledCheckbox checked={checked} onClick={setChecked} />;
};
这是我的useCheckbox.tsx,
import { useState } from "react";
export const useCheckbox = (initialState: boolean) => {
const [checked, _setChecked] = useState<boolean>(initialState);
const setCheckedToggle = () => _setChecked((prev) => !prev);
const setCheckedTrue = () => _setChecked(true);
const setCheckedFalse = () => _setChecked(false);
return { checked, setCheckedToggle, setCheckedTrue, setCheckedFalse };
};
export default Checkbox;
效果很好。我可以这样使用
import Layout from "components/Layout";
import { useCheckbox } from "hooks/useCheckbox";
import Checkbox from "components/Checkbox";
const Home = () => {
const { checked, setCheckedToggle } = useCheckbox(false);
return (
<Layout>
<Checkbox checked={checked} setChecked={setCheckedToggle} />
</Layout>
);
};
export default Home;
但我在List 组件中遇到了问题。
List 有一个Checkbox 组件,我必须将此List 与data 一起使用。
const Home = ({data}) => {
return (
<Layout>
{data.map((d) => <List />)}
</Layout>
);
};
这种情况下,有没有办法判断列表是否被选中?
如果List 具有useCheckbox,则Home 组件不知道checked 状态。
我应该在Home 组件中使用useCheckbox data.length 次吗?我觉得这样不好。
感谢阅读,新年快乐。
【问题讨论】:
-
为什么你有两个同名的组件? - 您的代码很好,但您需要在 map() 函数上使用数据之前检查数据是否实际存在。类似于 data.length > 0 && data.map()
标签: javascript reactjs react-hooks components state