setFlagAvailability(flagsAvailable);
в первом useEffect обновит только значение flagAvailability во втором рендере
второй useEffect в первом рендере получит только начальное значение flagAvailability (я знаю, что это как круг)
Каждый рендер имеет свой собственный useEffect и useState
Одним из решений является пропуск первого рендера в setShowFlags useEffect путем создания флага useRef, подобного этому
const ref = useRef(false)
const [flagAvailability, setFlagAvailability] = useState(true);
const [showFlags, setShowFlags] = useState(true);
useEffect(()=> {
if(ref.current){
...
setShowFlags();
ref.current = false;
}
},[flagAvailability])
useEffect(() => {
...
setFlagAvailability();
ref.current = true
},[i18n.language])
или вы можете просто изменить flagAvailability как useRef, потому что refvalue всегда будет новым значением.
const flagRef = useRef([]])
const [showFlags, setShowFlags] = useState(true);
useEffect(() => {
flagRef.current = flagsAvailable
},[i18n.language])
useEffect(()=> {
for (let [k, v] of Object.entries(flagRef.current)) {
setShowFlags();
}
},[showFlags])