开发者问题收集

如何设置状态,不断获取 TypeError: 无法读取未定义的属性“setState”

2019-05-08
45

我尝试使用从 axios get 返回的数据来设置状态。但是我一直收到此错误 TypeError:无法读取未定义的属性“setState”。

class Page extends React.Component {

constructor(props) {
    super(props);
    this.authenticated = props.authenticated;
    //this.handleClick = this.handleClick.bind(this);
} 

state ={
    page : []
}

componentDidMount() {
    let config = null;
    //let token = null;
    app.auth().currentUser.getIdToken(true).then(function(idToken) {
        config = {
            headers: {'Authorization': idToken}
        };
        console.log(config);
        axios.get('http://localhost:4001/api/v1/page',config)
        .then(res => {
            console.log(res.data);
          const page = res.data;
          this.setState( page );
        }).catch((err)=>{
            console.log(err);
        });

     })

  }

render () {

    const authenticated = this.authenticated;
    console.log(authenticated);
    console.log(this.state);

    return (
        <h1> test 123</h1>
      );
}

>

1个回答

axios 中的 this 指的是不同的东西,将 this 的值存储在变量中并使用该变量

componentDidMount = () => {
  let config = null;
  //let token = null;
  const current = this; // here save this in current variable
  app
    .auth()
    .currentUser.getIdToken(true)
    .then(function(idToken) {
      config = {
        headers: { Authorization: idToken }
      };
      console.log(config);
      axios
        .get('http://localhost:4001/api/v1/page', config)
        .then(res => {
          console.log(res.data);
          const page = res.data;
          current.setState(page); // use current here
        })
        .catch(err => {
          console.log(err);
        });
    });
}
Junius L
2019-05-08