2017-08-16 1 views
2

J'ai un tableau d'objet qui obtient des données d'utilisateurs en utilisant l'API de récupération. J'ai essayé le constructeur, créer une fonction, lier. Ça n'a pas marché. J'ai essayé ComponentDidMount et setState, il renvoie undefined.ReactJS: Quelle est la bonne façon de définir une valeur d'état en tant que tableau?

class Admin extends Component { 


    componentDidMount() { 

     var that = this; 
     fetch('http://localhost:4500/data/users', { 
      method: 'GET', 
      headers: { 
      'Accept': 'application/json', 
      'Content-Type': 'application/json', 
      } 
     }).then(function(response) { 
      return response.json(); 
     }).then(function(json){ 
      console.log(json); 
      that.state = {users: json}; 
     }); 

    } 

    render() { 

    return (

     <SpicyDatatable 
      tableKey={key} 
      columns={columns} 
      rows={this.state.users} 
      config={customOptions} 
     /> 
     ); 
    } 
} 

Quelle est la bonne façon de définir une valeur d'état en tant que tableau et de le rendre? Merci

+3

double possible de [reactjs comment mettre à jour l'état] (https://stackoverflow.com/questions/36527426/reactjs-how-to-update-state) –

Répondre

2

d'abord initialiser votre état dans votre constructeur comme celui-ci

constructor(props) { 
     super(props); 
     this.state = {users : []} //initialize as array 
    } 

Ensuite, au lieu de that.state = {users: json}; définir votre état en utilisant

that.setState({ users: json }); 
+1

Je ne pense pas que vous voulez les parenthèses autour de l'objet d'état. Il devrait être 'this.state = {users: []}' –

+1

C'est exact, mis à jour la réponse. Merci – abdul

+0

Je reçois les données quand je l'ai connecté. – Olalekan

1

Vous devez utiliser la méthode React setState().

that.setState({ users: json }); 
+0

Merci, juste essayé. Il est retourné nul. – Olalekan

+0

@Olalekan et que montre 'console.log (json)' dans la console? –

0

Vous avez déjà obtenu la réponse à utiliser setState({ users: json }), qui est juste . Comme alternative à l'initialisation de la valeur de tableau comme abul, vous pouvez également effectuer un rendu conditionnel, en fonction de l'état du composant. Par exemple, vous pouvez rendre un composant différent si les utilisateurs ne sont pas encore chargés.

render() { 
    const users = this.state.users; 
    return !users ? 
     <p>Loading..</p> : 
     <YourComponent users={users} />; 
}