У меня возникла очень странная проблема с моим кодом реакции: useState не обновляет представление, и после того, как буквально все испробовали, проблема все еще существует. Я сделал простой код, чтобы объяснить проблему:
function(){
const [enterJob, setEnterJob] = useState(false);
const [jobSelection, setJobSelection] = useState(Array(someList.length).fill(false));
const jobRef = useRef();
const handleJobClick = i => {
const n = parseInt(i.target.id.charAt(0)); // the list is small enough to allow this
let c = jobSelection;
c[n] = !c[n];
setJobSelection(c);
};
const handleMouse = (e) =>{
if (!jobRef.current.contains(e.target)){
setEnterJob(false);
};
};
useEffect(() => {
window.addEventListener("mousedown", handleMouse);
return () => window.removeEventListener("mousedown", handleMouse);
});
return(
<div ref={jobRef}>
<input onFocus={()=> setEnterJob(true)} />
<div style={{display: `${enterJob ? 'flex' : 'none'}`}} >
<ul>
{ someList.map((item,index)=>
<li id={`${index}`} onClick={handleJobClick}> {jobSelection[index] ? item : "you clicked on the button"} </li> )}
</ul>
</div>
</div>
)
}
Некоторые пояснения: я использую UseEffect и useRef для создания раскрывающегося меню, которое исчезает, когда вы щелкаете мышью за пределами контейнера. Теперь, когда я хочу щелкнуть значение этого раскрывающегося меню, оно не обновляет DOM, пока я использую useState для обновления значения строки, ответственной за изменение.
Заранее спасибо, Charbel