Это, кажется, элегантный способ уменьшить котельную плиту для меня.Я создал коды и окно для проверки его поведения.
const UnitUnderTest = ({prop}) => {
let [someState, setSomeState] = useState(false);
const lessCodeThanCheckingPrevRow = useMemo(
() => setSomeState(current => !current),
[prop],
);
useEffect(() => console.log('update finished'), [prop])
console.log('run component');
return `State: ${someState}`;
}
const App = () => {
const [prop, setProp] = useState(false);
const handleClick = () => setProp(current => !current);
return (
<div>
<button onClick={handleClick} >change prop</button>
<UnitUnderTest prop={prop} />
</div>
)
};
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
Вывод при нажатии кнопки для изменения пропуска, передаваемого компоненту:
> run component
> run component
> update finished
Как видите, компонент был запущен дважды до завершения цикла обновления.Это эквивалентно поведению getDerivedStateFromProps
.
Я думаю, что нет более глубокой мысли о том, почему в документах предлагается немного другая техника.В некотором смысле это тоже ручная проверка, но аккуратно.+1 за идею.