目标
我想将布尔值从复选框传递到父元素以更改那里的状态。
描述
我有以下功能(缩短):
export default function Contact() {
const [isChecked, setIsChecked] = React.useState();
...
function handleCheck() {
setIsChecked(!isChecked);
}
...
return (
...
<CheckBoxContainer>
<CheckBox type="checkbox" defaultChecked={isChecked} onChange={handleCheck} />{" "}
<CheckBoxText>
Ich habe die{" "}
<SmallInlineLink to="/privacy">Datenschutzbestimmungen</SmallInlineLink> zur
Kenntnis genommen.
</CheckBoxText>
</CheckBoxContainer>
<Button
disabled={
isChecked !== true
}
>
Abschicken
</Button>
)}
到目前为止有效。但我想以CheckBoxContainer
几种形式重用它,为此我想让它成为一个功能组件。
它应该如下所示:
export default function Contact() {
const [isChecked, setIsChecked] = React.useState();
...
function handleCheck() {
setIsChecked(!isChecked);
}
...
return (
...
<CheckBoxContainer checked={isChecked} onChange={handleCheck} />
<Button
disabled={
isChecked !== true
}
>
Abschicken
</Button>
)}
所以我有一个可重复使用的Checkboxcontainer
,像这样:
import styled from "@emotion/styled";
import React from "react";
import { CheckBox } from "../Form/InputFields";
import { CheckBoxText } from "../Text";
import { SmallInlineLink } from "../Navigation/NavLinks";
export const Container = styled.div`
display: flex;
`;
export default function CheckBoxContainer(isChecked, handleCheck) {
console.log("Checkbox Component" + isChecked);
return (
<Container>
<CheckBox type="checkbox" defaultChecked={!isChecked} onChange={() => handleCheck} />{" "}
<CheckBoxText>
Ich habe die <SmallInlineLink to="/privacy">Datenschutzbestimmungen</SmallInlineLink> zur
Kenntnis genommen.
</CheckBoxText>
</Container>
);
}
问题
如何将布尔值从
CheckBoxContainer
正确的传递到父元素?目前,console.log 向我显示了一个 [object Object]
可能的解决方案
父元素中的函数调用:
{CheckBoxContainer(isChecked, () => setIsChecked(!isChecked))}
子功能:
export default function CheckBoxContainer(isChecked, setIsChecked) {
return (
<Container>
<CheckBox
type="checkbox"
defaultChecked={isChecked}
onChange={() => setIsChecked(!isChecked)}
/>{" "}
<CheckBoxText>
Ich habe die <SmallInlineLink to="/privacy">Datenschutzbestimmungen</SmallInlineLink> zur
Kenntnis genommen.
</CheckBoxText>
</Container>
);
}
谢谢@viknek