@gsdev99

Как добавить/удалить элемент в/из массив(а)?

Подскажите, как реализовать следующую логику:

При click на элемент, надо записывать значение в массив. При повторном click на элемент, удалять значение из массива (если оно там есть). Также по тому же принципу добавлять/удалять class на элементе. Т.е. я click на элемент - добавился класс на элементе и записалось значение в массив, и также другие элементы. Если я click, и id этого элемента уже есть в массиве, удаляю у него класс и его id из массива.

import React  from 'react'

class App extends React.Component {
  constructor(props) {
    super(props);

    this.list = [];

    this.items = [
      { id: 1, value: 'item 1' },
      { id: 2, value: 'item 2' },
      { id: 3, value: 'item 3' },
      { id: 4, value: 'item 4' },
      { id: 5, value: 'item 5' },
      { id: 6, value: 'item 6' },
      { id: 7, value: 'item 7' },
      { id: 8, value: 'item 8' }
    ];
  }

  setDataLocalStorage = (item) => {
    this.list.push(item.id);

    console.log(this.list);
  }

  render() {
    return (
      <React.Fragment>
        {
          this.items.map((item, index) => {
            return (
              <ul
                className=""
                key={index}
              >
                <li
                  onClick={() => this.setDataLocalStorage(item)}
                >
                  { item.value }
                </li>
              </ul>
            );
          })
        }
      </React.Fragment>
    )
  }
}

export default App;
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
class App extends React.Component {
  state = {
    items: Array.from({ length: 10 }, (n, i) => ({
      id: i + 1,
      value: String.fromCharCode(97 + i).repeat(5),
    })),
    active: [],
  }

  toggleActive = e => {
    const id = +e.target.dataset.id;

    this.setState(({ active }) => ({
      active: active.includes(id)
        ? active.filter(n => n !== id)
        : [ ...active, id ],
    }));
  }

  render() {
    const { items, active } = this.state;

    return (
      <ul>
        {items.map(n => (
          <li
            key={n.id}
            data-id={n.id}
            onClick={this.toggleActive}
            className={active.includes(n.id) ? 'active' : ''}
          >
            {n.value}
          </li>
        ))}
      </ul>
    );
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы