【问题标题】:TypeError: Cannot read property 'setState' of undefined/XMLTypeError:无法读取未定义/XML 的属性“setState”
【发布时间】:2019-10-10 21:44:06
【问题描述】:

我正在调用使用 XML 的服务,所以我想将 XML 解析为 JSON,并将 JSON 数据集作为我的反应状态,但我得到了。

 TypeError: Cannot read property 'setState' of undefined
axios
  .get(session_url)
  .then(function(response) {
    parseString(response.data, (err, result) => {
      if (err) {
        throw err;
      } else {
        this.setState({
          odm: result.data,
          loading: false,
        });
      }
    });
  })
  .catch(function(error) {
    console.log(error);
  });

【问题讨论】:

    标签: reactjs


    【解决方案1】:

    您正在混合和匹配不能捕获 thisfunction()s 和能够捕获的箭头 (=>) 函数。

    只需在任何地方使用箭头函数,this(即您的 React 组件)就会被正确捕获:

    axios
      .get(session_url)
      .then(response => {
        parseString(response.data, (err, result) => {
          if (err) {
            throw err;
          } else {
            this.setState({
              odm: result.data,
              loading: false,
            });
          }
        });
      })
      .catch(error => {
        console.log(error);
      });
    

    如果可以,最好使用async 函数:

    // promisified version of `parseString`:
    const parseStringP = data =>
      new Promise((resolve, reject) =>
        parseString(response.data, (err, result) => {
          if (err) return reject(err);
          resolve(result);
        }),
      );
    
    // ...
    
    try {
      const response = await axios.get(session_url);
      const result = await parseStringP(response.data);
    
      this.setState({
        odm: result.data,
        loading: false,
      });
    } catch (error) {
      console.log(error);
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-30
      • 2017-10-30
      • 2021-12-09
      • 2020-07-10
      • 2021-07-24
      • 2022-11-17
      • 2020-09-07
      相关资源
      最近更新 更多