Я использую реагирующие крючки. Если реквизиты изменены, какие способы получить начальное значение? Я хочу избежать эффекта анти-паттерна.
ситуация 1
перед построением DOM.
насколько я понимаю, для этих целей подойдет использование useMemo.if есть другие варианты, которые вы можете их показать.
ситуация 2
после DOM
И в этом варианте useLayoutEffect, useEffect.if есть другие варианты, которые вы можете их показать.
import React, { useState, useMemo, useLayoutEffect, useEffect } from "react";
import ReactDOM from "react-dom";
import "./styles.css";
const X = () => {
const [x, setX] = useState(0);
return (
<div>
<div>
<Y x={x} />
</div>
<div onClick={() => setX(x + 1)}>{"go"}</div>
</div>
);
};
function Y({ x }) {
const [y, setY] = useState(x);
/* useMemo(() => {
console.log("");
setY(x);*/
}, [x]);
/*useEffect(() => {
console.log("");
setY(x);
}, [x]);*/
/*useLayoutEffect(() => {
console.log("");
setY(x);
}, [x]);*/
console.log(y);
return <div className="App">{console.log(y, "DOM")}</div>;
}
const rootElement = document.getElementById("root");
ReactDOM.render(<X />, rootElement)
Я не думаю, что это хорошая практика, чтобы использовать все эти крючки. но я не вижу другого решения. Может быть, есть третий вариант без использования хуков?