Code: Select all
import { MouseEvent, useState } from "react";
interface ToggleParams {
label?: string;
value?: boolean;
disabled?: boolean;
onToggleClick?: (
event: MouseEvent,
value: boolean
) => void;
}
const Toggle = ({
label = "",
value = false,
disabled = false,
onToggleClick = () => {},
}: ToggleParams) => {
const [enabled, setEnabled] = useState(value);
const handleClick = (event: MouseEvent) => {
if (disabled) return;
console.log("handleClick > enabled", enabled);
const newValue = !enabled;
console.log("handleClick > newValue", newValue);
setEnabled(value);
onToggleClick(event, newValue);
};
return (
{`${enabled ? "true" : "false"} ${label}`}
);
};
export default Toggle;
< /code>
Hier ist der Code, der diese Komponente testetimport { useState } from "react";
import Toggle from "./Toggle";
export default function App() {
const [toggleAll, setToggleAll] = useState(false);
const [toggleItem, setToggleItem] = useState(false);
const [toggleDisabled, setToggleDisabled] = useState(false);
console.log("Toggle state", toggleAll, toggleItem, toggleDisabled);
const onToggleAllClick = (event: any, value: boolean) => {
setToggleAll(value);
setToggleItem(value);
setToggleDisabled(value);
};
const onToggleItemClick = (event: any, value: boolean) => {
setToggleItem(value);
if (!value) {
setToggleAll(value);
setToggleDisabled(value);
}
};
return (
);
}
auf das Element Umkippung klicke.
Code: Select all
handleClick > enabled false
handleClick > newValue true
Toggle state false true false
< /code>
zeigt an, dass der Code funktioniert. Die Anzeige zeigt jedoch < /p>
anfalse Toggle All
false Toggle Item
false Toggle Disabled
< /code>
Dies bedeutet, dass die Umschaltkomponente selbst nicht geändert wurde < /p>
, um erneut darauf zu klicken, und dann die Anzeige korrekt auf diese < /p>
ändertfalse Toggle All
true Toggle Item
false Toggle Disabled
Ich aktualisiere die Seite, um erneut zu starten.
Code: Select all
handleClick > enabled false
handleClick > newValue true
Toggle state true true true
< /code>
Die Anzeige wird jedoch fälschlicherweise < /p>
fälschlicherweise angezeigtfalse Toggle All
false Toggle Item
false Toggle Disabled
geändert haben, wenn ich erneut auf alle klicke, die Konsole ist gleich, aber die Anzeige ändert sich zu
Code: Select all
true Toggle All
false Toggle Item
false Toggle Disabled
Die Anzeige ändert sich zu < /p>
Code: Select all
handleClick > enabled true
handleClick > newValue false
Toggle state false false false
immer noch falsch an
Code: Select all
true Toggle All
false Toggle Item
false Toggle Disabled