setNumber
, который используется в setInterval
:Монтирование -> setNumber -> рендер
Ререндер-> setNumber + 1 от прошлого рендера -> 2 рендера
x2 Ререндер -> setNumber + 2 от прошлого рендера -> 4 рендера (было запущена уже 2 setInterval и каждый еще раз вызвал рендер)
и т.д.
setInterval
Вы не очищаете. На первый рендер он один, на второй - два, на третий - три и т.д.. Причем, количество рендеров будет расти стремительно, т.к. каждый такой setInterval
будет его вызывать. const mapOptions = (options, values) => option.map(({ option }) => {
const usedValues = new Set();
return {
id: option.id,
name: option.name,
slug: option.slug,
values: values
.filter(({ id, value }) => {
if (id === option.id) {
const isUsed = usedValues.has(value);
usedValues.add(value);
return !isUsed;
}
return false;
})
.map(({ id, value }) => ({ id, value }))
};
});
useEffect(() => console.log(state), [state]);