Создание нумерации страниц в ReactJS - PullRequest
0 голосов
/ 11 февраля 2019

Я получил этот код из другого потока (, как реализовать разбиение на страницы вactJs ):

  constructor() {
    super();
    this.state = {
      todos: ['a','b','c','d','e','f','g','h','i','j','k'],
      currentPage: 1,
      todosPerPage: 3
    };
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick(event) {
    this.setState({
      currentPage: Number(event.target.id)
    });
  }

  render() {
    const { todos, currentPage, todosPerPage } = this.state;

    // Logic for displaying todos
    const indexOfLastTodo = currentPage * todosPerPage;
    const indexOfFirstTodo = indexOfLastTodo - todosPerPage;
    const currentTodos = todos.slice(indexOfFirstTodo, indexOfLastTodo);

    const renderTodos = currentTodos.map((todo, index) => {
      return <li key={index}>{todo}</li>;
    });

    // Logic for displaying page numbers
    const pageNumbers = [];
    for (let i = 1; i <= Math.ceil(todos.length / todosPerPage); i++) {
      pageNumbers.push(i);
    }

    const renderPageNumbers = pageNumbers.map(number => {
      return (
        <li
          key={number}
          id={number}
          onClick={this.handleClick}
        >
          {number}
        </li>
      );
    });

    return (
      <div>
        <ul>
          {renderTodos}
        </ul>
        <ul id="page-numbers">
          {renderPageNumbers}
        </ul>
      </div>
    );
  }
}


ReactDOM.render(
  <TodoApp />,
  document.getElementById('app')
);

Нумерация страниц работает нормально, но "todos" - это массивстрок, в то время как мои данные представляют собой массив объектов в js-файле, например:

const vehiclesData = [
    {
        id: 1,
        brand: "BMW",
        model: "X5",
    },
    {
        id: 2,
        brand: "Audi",
        model: "RS6",
    },
    {
        id: 3,
        brand: "Ford",
        model: "Shelby GT350",
    },
    {
        id: 4,
        brand: "Volkswagen",
        model: "Golf VI",
    },
    {
        id: 5,
        brand: "Chevrolet",
        model: "Camaro",
    }
]

export default vehiclesData;

Я пытался сделать это сам, но безуспешно.Я только начинаю учить себя реагировать.Как я могу отредактировать код, чтобы включить вместо него мои данные?Любая помощь будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

ваш код должен быть примерно таким


const vehiclesData = [
    {
        id: 1,
        brand: "BMW",
        model: "X5",
    },
    {
        id: 2,
        brand: "Audi",
        model: "RS6",
    },
    {
        id: 3,
        brand: "Ford",
        model: "Shelby GT350",
    },
    {
        id: 4,
        brand: "Volkswagen",
        model: "Golf VI",
    },
    {
        id: 5,
        brand: "Chevrolet",
        model: "Camaro",
    }
]
    class TodoApp extends React.Component {
      constructor() {
        super();
        this.state = {
          vehiclesData,
          currentPage: 1,
          todosPerPage: 3
        };
        this.handleClick = this.handleClick.bind(this);
      }

      handleClick(event) {
        this.setState({
          currentPage: Number(event.target.id)
        });
      }

      render() {
        const { vehiclesData, currentPage, todosPerPage } = this.state;

        // Logic for displaying current todos
        const indexOfLastTodo = currentPage * todosPerPage;
        const indexOfFirstTodo = indexOfLastTodo - todosPerPage;
        const currentTodos = vehiclesData.slice(indexOfFirstTodo, indexOfLastTodo);

        const renderTodos = currentTodos.map((vd, index) => {
          return <li key={index}>{vd.brand} {vd.model}</li>;
        });

        // Logic for displaying page numbers
        const pageNumbers = [];
        for (let i = 1; i <= Math.ceil(vehiclesData.length / todosPerPage); i++) {
          pageNumbers.push(i);
        }

        const renderPageNumbers = pageNumbers.map(number => {
          return (
            <li
              key={number}
              id={number}
              onClick={this.handleClick}
            >
              {number}
            </li>
          );
        });

        return (
          <div>
            <ul>
              {renderTodos}
            </ul>
            <ul id="page-numbers">
              {renderPageNumbers}
            </ul>
          </div>
        );
      }
    }


    ReactDOM.render(
      <TodoApp />,
      document.getElementById('app')
    );

вот модифицированная версия

0 голосов
/ 12 февраля 2019

Теперь это должно отображать любой список, который вы хотите.В вашем случае у вас есть массив объектов.С картой он ведет себя как петля, проходя через каждый элемент.Теперь с каждым элементом вы можете вернуть элемент тега li, который имеет vehicle.brand или vehicle.model ... надеюсь, это имеет смысл

const renderVehiclesData  = vehiclesData .map((vehicle, index) => {
  return <li key={index}>{vehicle.brand}</li>;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...