2017-07-29 1 views
0

Im nouveau pour réagir et j'essaye d'afficher des données de réponse que je reçois d'une demande d'obtention. J'ai regardé plusieurs poteaux semblables, essayant d'implémenter ce qui a fonctionné pour d'autres, mais pour moi rien ne fonctionne. Dans mon code ci-dessous, je ne reçois aucune erreur (l'état de l'ensemble semble fonctionner aussi) mais rien n'est affiché et je ne sais pas pourquoi. Des idées? Merci!Réagir - Mappage via les données de réponse à partir de la requête get-pourquoi les données de réponse ne sont pas affichées?

 class Testing extends React.Component { 
      constructor(props) { 
       super(props); 
       this.state = { 
        name: [] 
       }; 
       this.getData = this.getData.bind(this) 
      } 
      componentDidMount() { 
       this.getData(); 
      } 
      getData() { 
       axios.get('https://example.com) 
        .then(results => { 
         return results.data; 
        }) 
        .then(res => { 
         let arr = res.items; 
         let test = []; 
         return arr.map(function(item) { 
          test.push(item); 
         }) 
         this.setState({ 
          name: test 
         }); 
        }) 
       } 

       render() { 
        const persons = this.state.name.map((item, i) => { 
         return 
          <div> 
           <h1> {item.name} </h1> 
          </div> 
        }); 

        return 
        <div id = "layout-content" className = "layout-content-wrapper" > 
         <div className = "panel-list"> 
          All: {persons} 
         </div> 
        </div> 
       } 
      } 

changé rendre:

class Testing extends React.Component { 
      constructor(props) { 
       super(props); 
       this.state = { 
        name: [] 
       }; 
       this.getData = this.getData.bind(this) 
      } 
      componentDidMount() { 
       axios.get('https://example.com) 
        .then(results => { 
         return results.data; 
        }) 
        .then(res => { 
         let arr = res.items; 
         let test = []; 
         return arr.map(function(item) { 
          test.push(item); 
         }) 
         this.setState({ 
          name: test 
         }); 

        }) 
       } 


       render() { 
        <div> 
         this.state.name ? this.state.name.map((item, i) => { 
          return (
           <div> 
           <h1>{ item.name }</h1> 
           </div> 
          ) 
         }) : null; 
        </div> 

       } 
      } 

erreur ici:

<div> 
    this.state.name ? this.state.name.map((item, i) => { 
    return (
     ^
     <div> 
      <h1>{ item.name }</h1> 
     </div> 

Répondre

1

Le problème avec votre code est que votre setState est jamais appelé. Si vous regardez votre dernière fonction de votre appel api, vous avez une déclaration de retour juste avant le setState (c'est-à-dire à arr.map). À cause de cela, votre code n'atteint jamais le setState. Supprimez l'instruction de retour et il devrait fonctionner:

   getData() { 
       axios.get('https://example.com) 
        .then(results => { 
         return results.data; 
        }) 
        .then(res => { 
         let arr = res.items; 
         let test = []; 
         arr.map(function(item) { 
          test.push(item); 
         }) 
         this.setState({ 
          name: test 
         }); 
        }) 
       } 

Modifier :: Ok essayez d'emballer vos render entre parenthèses () comme celui-ci

   render() { 
        const persons = this.state.name.map((item, i) => { 
         return 
          (<div> 
           <h1> {item.name} </h1> 
          </div>); 
        }); 

        return 
        (<div id = "layout-content" className = "layout-content-wrapper" > 
         <div className = "panel-list"> 
          All: {persons} 
         </div> 
        </div>); 
       } 
+0

merci. J'ai essayé votre solution mais toujours-rien n'est affiché. Je pense que le problème est avec ma fonction de rendu ?! – javascripting

+0

Je ne pense pas qu'il y ait un problème avec votre fonction de rendu dans votre premier extrait de code. Etes-vous sûr que vos données proviennent d'API? –

+0

oui. quand je console.log les données, il montre réellement des données pour que cela fonctionne bien .. – javascripting

0

Tout d'abord, déplacez votre fonction getData ou la logique de demande, même tout en componentWillMount fonction. En second lieu, changer votre fonction render dans:

render() { 
    return (
    <div> 
     this.state.name ? this.state.name.map((item, i) => { 
      return (
      <div> 
       <h1>{ item.name }</h1> 
      </div> 
     ) 
     }) : null; 
    </div> 
    ) 
} 
+0

merci pour la réponse. Lorsque j'ai changé la fonction de rendu (s'il vous plaît voir modifier) ​​im obtenir une erreur: SyntaxError: Jeton inattendu (il semble qu'il y a quelque chose de mal avec le retour parce que c'est ce que j'obtiens l'erreur pour) – javascripting

+0

Veuillez formater votre code :( –

+0

Je l'ai fait – javascripting