Как отображать массивы состояний в React в таблице

#javascript #reactjs #ecmascript-6 #jsx

#javascript #reactjs #ecmascript-6 #jsx

Вопрос:

У меня есть компонент, который выполняет вызов api и извлекает данные, и у меня есть массивы в состоянии 6, и с помощью setState я добавляю данные в массивы, и я хотел бы их отобразить.

Я попробовал this.state.array1.map и т. Д. … и так с каждым массивом для всех строк, но он не отображает их правильно, и я также попытался обернуть их в объект в состоянии и сопоставить объект, но это выдает ошибку.

Вот код:

 import React from 'react';
import axios from 'axios';




 class ListaMesaje extends React.Component {
 constructor(props){
 super(props);
 this.state = {
 obiect: {
 cif: [],
 data_creare: [],
 detalii: [],
 id: [],
 id_solicitare: [],
 tip: []
 }
 

 }
 }




 render() {

 axios.get(`http://localhost/spv/react-php/src/server.php`)
 .then(res => {
 const persons = res.data;

 for(var i = 0; i < 5; i  ) {
  this.setState({cif: [...this.state.cif, persons.mesaje[i].cif]});
  this.setState({data_creare: [...this.state.data_creare, persons.mesaje[i].data_creare]});
  this.setState({detalii: [...this.state.detalii, persons.mesaje[i].detalii]});
  this.setState({id: [...this.state.id, persons.mesaje[i].id]});
  this.setState({id_solicitare: [...this.state.id_solicitare, persons.mesaje[i].id_solicitare]});
  this.setState({tip: [...this.state.tip, persons.mesaje[i].tip]});
  }

  })



   return(
  <div>

  {this.state.obiect.cif(x=>(
   <h3>{x}</h3>
   ))}

  </div>
  );
   }


   }

  export default ListaMesaje
  

Я был бы признателен, если бы sombody мог помочь мне с примером того, как отобразить все массивы из состояния в таблице html.

Большое спасибо

Ответ №1:

Прямо сейчас вы выполняете вызов API, и пока вы ждете, вы выполняете рендеринг. Когда вы получили данные и обновили состояние, это запускает новый рендеринг и новый вызов API. Новый рендеринг, новый вызов API и т.д.

Вызовы API не должны выполняться в методе render. Переместите его в метод жизненного цикла componentDidMount (или в обработчик событий, в зависимости от ожидаемого поведения). Таким образом, когда компонент монтируется, он выполняет вызов API, выполняет рендеринг с исходными данными и другой, когда вы получили реальные данные.

И в вашем методе рендеринга просто map() через массив:

 return(
    <div>
        {this.state.obiect.cif.map(x => (
            <h3>{x}</h3>
        ))}
    </div>
);
  

Комментарии:

1. Мне удалось отобразить значения, но я хотел бы отобразить массивы в таблице html. Но в состоянии у меня всего 6 массивов. Как я могу сопоставить состояние с 6 массивами, чтобы я мог поместить массив в каждую строку? Спасибо