@gsdev99

Как реализовать вращение массива?

Есть компонент:

import React from "react";

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

    this.state = {
      items: [
        {id: 1},
        {id: 2},
        {id: 3},
        {id: 4},
        {id: 5},
      ]
    };
  }

  nextHandler = () => {

  };

  prevHandler = () => {

  };

  render() {
    return (
      <React.Fragment>
        <ul className="list">
          {
            this.state.items.map((item) => {
              return (
                <div
                  key={item.id}
                >
                  <div className="list__item">
                    key={item.id}
                  </div>
                </div>
              );
            })
          }
        </ul>

        <div className="controls">
          <button type="button" onClick={this.prevHandler}>prev</button>
          <button type="button" onClick={this.nextHandler}>next</button>
        </div>
      </React.Fragment>
    );
  }
};

export default App;

При нажатии на кнопку next, необходимо перемещать первый элемент массива items в конец:

items = [
  {id: 2},
  {id: 3},
  {id: 4},
  {id: 5}
  {id: 1},
]

И, соответственно, при нажатии на prev, перемещать последний в начало.
  • Вопрос задан
  • 289 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
nextHandler = () => {
  const items = [...this.state.items];
  items.push(items.shift());
  this.setState({ items });
}

prevHandler = () => {
  const items = [...this.state.items];
  items.unshift(items.pop());
  this.setState({ items });
}


или, можно обойтись одним обработчиком:

<button onClick={this.nextHandler} data-step={-1}>prev</button>
<button onClick={this.nextHandler} data-step={+1}>next</button>

nextHandler = (e) => {
  const step = +e.target.dataset.step;

  this.setState(({ items }) => ({
    items: [ ...items.slice(step), ...items.slice(0, step) ],
  }));
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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