如后续重新渲染期间的文档中所述,返回的第一个值useState将始终是应用更新后的最新状态。但是,我有一个用例,其中状态需要在后续重新渲染期间重新初始化为道具中提供的初始值。
将此示例视为我的用例的简化版本:
import React from "react";
import "./styles.css";
function Counter({ initialCount, handleChange }) {
const [count, setCount] = React.useState(initialCount);
const handleClick = (counter) => {
setCount(count + counter);
handleChange(count);
};
return (
<>
<h1>Counter {count}</h1>
<button
type="button"
onClick={() => handleClick(1)}
style={{ marginRight: "8px" }}
>
Add
</button>
<button type="button" onClick={() => handleClick(-1)}>
Subtract
</button>
</>
);
}
export default function App() {
const [countOne, setCountOne] = React.useState(1);
const [countTwo, setCountTwo] = React.useState(countOne % 2);
return (
<div className="App">
<Counter
initialCount={countOne}
handleChange={(val) => setCountOne(val)}
/>
<Counter
initialCount={countTwo}
handleChange={(val) => setCountTwo(val)}
/>
</div>
);
}
您也可以检查代码和框。
当我增加第一个计数器时,我希望将第二个计数器重置为 0 或 1(无论它是什么状态),具体取决于第一个计数器中的计数是偶数还是奇数。请注意,只有单向依赖,没有任何循环的意义;更改第二个计数器中的计数不应重置第一个计数器中的计数。
喵喵时光机
相关分类