JolyCode
@JolyCode
junior frontend developer

В чем проблема, при попытке удалить компонент?

Вот сам компонент, назовем его Component.jsx, покажу важную часть кода
<div>
      <form>
        <div>
          <button>
            <img src={buttonUp}/>
          </button>
          <button>
            <img src={buttonDown}>
          </button>
          <img
            src={removeComponent}
            onClick={props.removeThisComponent}
          />

А это скажем, App.js
const [components, setComponents] = useState([]);
{components.map((item, index, i) => (
            <Component key={index} removeThisComponent={removeComponent} />
          ))}

Каждый раз, когда я пытаюсь удалить текущий элемент компонента, у меня ничего не получается, я пробовал через фильтр, ничего не работает, но когда пытаюсь получить доступ к тому, что я пытаюсь удалить, у меня пишет что это img, к которому привязан onClick, а еще выходила такая ошибка:

Encountered two children with the same key, `null`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — the behavior is unsupported and could change in a future version.

У меня у самого нет понимания что я делаю, просто до этого я пользовался mockAPI, а там каждый компонент автоматически становиться уникальным при помощи создания id, который он сам создает, а здесь мне mockAPI не нужен, поэтому в недоумении.

Если я что-то плохо объяснил, спрашивайте, я объясню в деталях.

А вот и сама функция удаления
function removeComponent(item) {
    setComponents(components.filter((p) => p !== item));
}


Возможно, дело в том, что я не делаю компоненты уникальными, но я и не знаю как это сделать, я видел кучу гайдов, где люди давали id, но, после map они писали саму верстку, а у меня готовый компонент.
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
TMProject
@TMProject
Frontend developer React/Redux
Что находится в стейте components? Изначально там пустой массив. Что ты туда заносишь?

Во-первых,
onclick должен вызывать функцию с передачей item, в твоём случае передается контекст img.

Во-вторых,
removeThisComponent={removeComponent}
это вообще зачем?
Зачем передавать в компонент функцию для удаления, если нужно передать item. И этот item дальше использовать в onclick.

Encountered two children with the same key, `null`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — the behavior is unsupported and could change in a future version.

Это говорит о том, что используется не уникальные, в пределах итерации key
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы