ОБНОВЛЕНИЕ - Объяснение, почему вы столкнулись с проблемой, описанной в вашем вопросе
Когда вы добавляете новый диапазон в ваше состояние, это похоже на то, что он захватывает изображение текущих значений вокруг это, в том числе значение spans
. Вот почему регистрация spans
по клику возвращает вам другое значение. Это значение, которое spans
имело, когда вы добавили <Span />
в свое состояние.
Это одно из преимуществ Закрытия . Каждый добавленный вами <Span />
создавал свое закрытие, ссылаясь на другую версию переменной spans
.
Есть ли причина, по которой вы переводите Компонент в свое состояние? Я бы посоветовал вам сохранить ваше состояние в чистоте и порядке. Таким образом, он также может быть использован повторно.
Вы можете, например, использовать useState
для создания пустого массива, где вы будете получать sh данные, относящиеся к spans
. Для примера я просто наберу sh метку времени, но для тебя это может быть что-то другое.
export default function App() {
const Span = props => {
return (
<div>
<span>{props.index}</span>
<button onClick={() => setSpans(spans.filter(span => span !== props.span))}>DELETE</button>
Length: {spans.length}
</div>
);
};
const [spans, setSpans] = React.useState([]);
return (
<>
{spans.length
? spans.map((span, index) => (
<Span key={span} index={index} span={span} />
))
: null}
<button onClick={() => setSpans([
...spans,
new Date().getTime(),
])}>add</button>
<button onClick={() => setSpans([])}>clear</button>
</>
);
}
Надеюсь, это поможет тебе найти свой путь.