2017-05-28 26 views
2

得到了一點心靈屁atm。我已經成功地寫下面的代碼,它從網址下載一個JSON,並將其顯示在屏幕上:無法讀取axios回調undefined的屬性setState

export default class Appextends React.Component { 

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

    componentWillMount() { 

    axios.get(//url//) 
     .then(function (response) { 
     localStorage.setItem('data', JSON.stringify(response.data)); 
     //this.setState({data: response.data}); -- doesnt work 
     }) 
     .catch(function (error) { 
     console.log(error); 
     }) 
    } 

    render() { 
    let items = JSON.parse(localStorage.getItem('data')); 
    return (
     <ul> 
     {items.map(v => <li key={v.id}>{v.body}</li>)} 
     </ul> 
    ) 

    }; 
} 

...這是奇怪的,因爲如果我想店內收到的JSON狀態對象中的數據,但是當我試圖這樣做時,它說狀態變量實際上並不存在...

這是什麼意思?由於它是組件將安裝函數,狀態不存在,所以這就是爲什麼我無法在那裏存儲接收到的數據?

有什麼辦法可以解決這個問題嗎?非常感謝

P.S:在這種情況下,實際的解決方案可以使用本地存儲,但質量相當低。

回答

2

的問題不在於國家不存在,那就是你不使用的狀態正確的上下文。

您需要bindaxios callback function,否則this內將參考其自己的上下文,而不是在反應成分的

axios.get(//url//) 
    .then((response) => { 
    this.setState({data: response.data}); 
    }) 
    .catch((error) => { 
    console.log(error); 
    }) 

和渲染

render() { 
    return (
     <ul> 
     {this.state.data.map(v => <li key={v.id}>{v.body}</li>)} 
     </ul> 
    ) 

    }; 
相關問題