2016-08-05 107 views
1

我正在通過ajax請求更新狀態到服務器。我正在從服務器接收數據,但由於某種原因,狀態不會更新,並且在嘗試迭代數組時顯示爲未定義。通過ajax請求更新狀態,但狀態仍未定義

class TodoList extends Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     data: undefined 
    } 
    } 

    componentWillMount() { 
    request 
     .get('http://localhost:8080/api/todo') 
     .end(function(err, res) { 
     this.setState({data: res}); 
     }.bind(this)); 
    } 

    render() { 
    return (
     <div> 
     <h1>Todo Items</h1> 
     <ul> 
      {this.states.data.map((item) => { 
      return <li>item.data</li> 
      })} 
     </ul> 
     </div> 
    ); 
    } 
} 

控制檯日誌

Uncaught TypeError: Cannot read property 'data' of undefined 
Uncaught TypeError: Cannot read property '_currentElement' of null 

回答

1

你跟this.state作出了語法錯誤的渲染方法,並使用默認值this.state.data

class TodoList extends React.Component { 
 
    constructor(props) { 
 
    super(props); 
 
    this.state = { 
 
     data: [] 
 
    } 
 
    } 
 

 
    componentWillMount() { 
 
    /*request 
 
     .get('http://localhost:8080/api/todo') 
 
     .end(function(err, res) { 
 
     this.setState({data: res}); 
 
     }.bind(this));*/ 
 
    } 
 

 
    render() { 
 
    return (
 
     <div> 
 
     <h1>Todo Items</h1> 
 
     <ul> 
 
      {this.state.data.map((item) => { 
 
      return <li>item.data</li> 
 
      })} 
 
     </ul> 
 
     </div> 
 
    ); 
 
    } 
 
} 
 

 
ReactDOM.render(
 
    <TodoList />, 
 
    document.getElementById('app') 
 
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 
<div id="app" />


0

首先,你有一個錯字,變化:

{this.states.data.map((item) => { 
    return <li>item.data</li> 
})} 

要:

{this.state.data.map((item) => { 
    return <li>item.data</li> 
})} 

而且,在你的數據被取出,state.dataundefinded,它沒有方法.map()
將其更改爲空數組:

constructor(props) { 
    super(props); 
    this.state = { 
    data: undefined 
    } 
} 

到:

constructor(props) { 
    super(props); 
    this.state = { 
     data: [] 
    } 
} 
+0

現在它的'未捕獲的TypeError:this.state.data.map不是函數' –

+0

您是否已將this.state = { data:undefined }'更改爲'this.state = { data:[] ''?如果是,請提供您從服務器獲得的結果。 –

+0

這是我得到的響應response {req:Request,xhr:XMLHttpRequest,text:「[{」_id「:」57a1d7606920c29a9d61cb40「,」author「:」sffsg ...或「:」dsdsdsdsd7「,」title「: 「買一個氣球」,「__ v」:0}]「,statusText:」OK「,statusCode:200 ...} –