У меня есть набор кнопок в дочернем компоненте, где при нажатии устанавливается соответствующее значение состояния true или false. У меня есть ловушка useEffect в этом дочернем компоненте, также с зависимостями от всех этих значений состояния, поэтому, если нажата кнопка, эта ловушка затем вызывает setFilter, который передается как опора от родителя ...
const Filter = ({ setFilter }) => {
const [cycling, setCycling] = useState(true);
const [diy, setDiy] = useState(true);
useEffect(() => {
setFilter({
cycling: cycling,
diy: diy
});
}, [cycling, diy]);
return (
<Fragment>
<Row>
<Col>
<Button block onClick={() => setCycling(!cycling)}>cycling</Button>
</Col>
<Col>
<Button block onClick={() => setdIY(!DIY)}>DIY</Button>
</Col>
</Row>
</Fragment>
);
};
В родительском компоненте я отображаю список элементов. У меня есть два эффекта в родительском, один из которых выполняет начальную загрузку элементов, а затем другой, который срабатывает при изменении фильтра. Я удалил большую часть кода для краткости, но я думаю, что проблема, которую я имею, сводится к тому факту, что при рендеринге моей ItemDashboard фильтр вызывается дважды. Как я могу остановить это, или есть другой способ, которым я должен смотреть на это.
const ItemDashboard = () => {
const [filter, setFilter] = useState(null);
useEffect(() => {
console.log('on mount');
}, []);
useEffect(() => {
console.log('filter');
}, [filter]);
return (
<Container>..
<Filter setFilter={setFilter} />
</Container>
);
}