2017-07-29 21 views
0

即時通訊新的反應,我試圖顯示響應數據,我從一個get request.I一直在尋找多個類似的職位,試圖實現什麼爲他人工作,但對我來說沒有任何工作。在我的代碼下面,我沒有得到任何錯誤(設置狀態似乎也工作)但沒有顯示,我不知道爲什麼。有任何想法嗎?謝謝!React - 通過獲取請求中的響應數據進行映射 - 爲什麼不顯示響應數據?

 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> 
       } 
      } 

改變渲染:

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> 

       } 
      } 

錯誤的位置:

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

回答

1

你的代碼的問題是你的setState從不被調用。如果你看看你的api調用的最後一個函數,你在setState之前(即在arr.map)有return語句。因爲你的代碼永遠不會到達setState。刪除return語句,它應該工作:

   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 
         }); 
        }) 
       } 

編輯::好的嘗試包裝你的括號渲染()這樣

   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

謝謝。我嘗試瞭解決方案,但仍然沒有顯示任何內容。我認爲問題出在我的渲染功能上? – javascripting

+0

我不認爲你的第一個代碼片段中的rendor函數有任何問題。你確定你的數據來自api嗎? –

+0

是的。當我console.log的數據,它實際上顯示數據,以便工作正常.. – javascripting

0

首先,將你的getData功能,甚至整個請求邏輯爲componentWillMount功能。其次,把你的render函數改成:

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

謝謝大家的回答。當我改變渲染功能(請參閱編輯)即時通訊得到一個錯誤:SyntaxError:意外的標記(似乎有什麼錯誤的回報,因爲那是什麼即時獲取錯誤) – javascripting

+0

請格式化您的代碼:( –

+0

我做了格式化它在這裏,你是什麼意思? – javascripting

相關問題