【问题标题】:React Native setState not a functionReact Native setState 不是函数
【发布时间】:2018-06-29 09:43:55
【问题描述】:

谁能解释一下为什么 this.setState 不是函数?

我不明白为什么我的代码有错误

import React from 'react';
import axios from 'axios'
import { StyleSheet, Text, View , Image} from 'react-native';

export default class App extends React.Component {

    constructor(){
        super();
        this.state = {res: []}
    }
    componentDidMount() {
        axios.get('https://api.github.com/repos/torvalds/linux/commits')
            .then(function (response) {
                this.setState({res: response});
            }).catch(function (error) {
                console.log(error);
            });
    }
 }

谢谢

【问题讨论】:

  • 使用箭头函数包裹this.setState({res: response});,将this带入箭头函数

标签: javascript reactjs function react-native setstate


【解决方案1】:

这是lexical scope 问题。使用arrow function

.then((response) => {
    this.setState({ res: response });
})

【讨论】:

    【解决方案2】:

    错误原因是this 没有引用 axios 的解析器函数中的组件类上下文。您可以将解析器函数用作胖箭头函数以使您的代码正常工作,如下所示:

    componentDidMount() {
        axios.get('https://api.github.com/repos/torvalds/linux/commits')
            .then((response) => {
                this.setState({res: response});
            }).catch(function(error) {
                console.log(error);
            });
    }
    

    或者您可以将其更改为如下所示:

    componentDidMount() {
         let self = this;
         axios.get('https://api.github.com/repos/torvalds/linux/commits')
             .then(function(response) {
                 self.setState({res: response});
             }).catch(function(error) {
                 console.log(error);
             });
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多