Я думаю, вам не хватает зависимости props.datas в вашем компоненте ComboBox.
let ComboBox = props => {
useEffect(() => {
for (let i = 0; i < props.datas.length; i++) {
console.log(i) //this can use if using hard props or manual data
props.datas[i].selected = false;
props.datas[i].show = true;
}
setDatas(props.datas);
document.addEventListener('click', e => {
try {
if (!refDivComboBox.current.contains(e.target)) {
setIsOpen(false);
}
} catch (error) {}
});
unSelectedComboBox();
}, [props.datas]); // THIS IS THE DEPENDENCY ARRAY, try adding props.datas here
export default ComboBox;
Вот краткое объяснение useEffect
.
Используется как componentDidMount()
:
useEffect(() => {}, [])
Используется как componentDidUpdate()
(срабатывает после props.something
изменений):
useEffect(() => {}, [props.something])
Используется как componenWillUnmount()
:
useEffect(() => {
return () => { //Unmount }
}, [])
Это, конечно , это действительно простое объяснение, и его можно использовать гораздо лучше, если его правильно усвоить. Взгляните на некоторые руководства, использующие useState
, попробуйте найти, в частности, миграции с this.state
на useState
- это может помочь вам понять useState