2017-05-28 180 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> 
    ) 

    };