では、状態が変化したときにコンポーネントが再レンダリングされることはわかっていますが、状態をリセットしたい場合はどうでしょうか。次の例を見てください。
const Parent = ({ type }) => {
switch (type) {
case "number":
return <ShowNumber />;
case "text":
return <ShowText />;
default:
return <h1>nothing to do here</h1>;
}
};
const ShowNumber = () => {
const [number, setNumber] = useState(0);
return (
<>
<h1>{number}</h1>
<button
onClick={() => {
setNumber(prevNumber => prevNumber + 1);
}}
>
Update number from child
</button>
</>
);
};
const ShowText = () => {
return <h1>{"Hello world"}</h1>;
};
export default () => {
const [type, setStype] = useState("");
return (
<>
<Parent type={type} />
<button
onClick={() => {
setStype("number");
}}
>
Show number
</button>
<button
onClick={() => {
setStype("text");
}}
>
Show text
</button>
</>
);
};
番号を更新して[テキストを表示]をクリックすると、ShowTextコンポーネントが呼び出されます。当然、ShowNumberコンポーネントに戻ると、私の番号はceroに戻ります。
しかし、切り替えずに番号(またはその他の州に関連するもの)をリセットしたい場合(たとえば、「番号を表示」ボタンを押すたびに、番号をceroに戻す)
あなたはそれを達成することができます、する2つのことがあります:
Parent
トリガーし、ボタンを押すたびにコンポーネントも再レンダリングされますconst [state, setState] = useState({});
...
setState({ type: "number" });
ShowNumber
一意のコンポーネントキーを設定することにより、予想されるコンポーネント(つまり)を再マウントします(詳細は回答を参照)return <ShowNumber key={`show-number-${new Date().getTime()}`} />;
私はフォークして新しいサンドボックスで変更しました:
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加