如何为多个查询重置axios.post?

时间:2019-02-06 04:23:21

标签: javascript reactjs axios

我有一个触发axios.post到API端点的按钮。该按钮在首次使用时起作用(console.log(res.data.userdata[0].txHash)成功)。

如果我更改状态(this.state.hashOutput)并再次按下按钮,则会发生Uncaught (in promise) TypeError: Cannot read property 'txHash' of undefined的错误。服务器上没有错误。

代码:

  handleOnClick() {
      const searchValue = this.state.hashOutput;
      axios.post("https://myapi.net/searchDB", {
          searchValue: searchValue
        })
        .then(res => {
          console.log(res.data);
        }).catch(err => console.log(err));
    }
  }

有什么想法吗?我不知道从哪里开始研究。谢谢!

3 个答案:

答案 0 :(得分:1)

您确定响应中包含数据数组还是单个对象? 无论如何,建议您在访问类似值之前先进行检查。

  handleOnClick() {
      const searchValue = this.state.hashOutput;
      axios.post("https://myapi.net/searchDB", {
          searchValue: searchValue
        })
        .then(res => {
          console.log(res.data.userdata && res.data.userdata[0] && res.data.userdata[0].txHash);  // make sure the value is available before accessing the property 
        });
    }
  }

每个帖子都是独立的,您不必像帖子中提到的那样reset。尝试先记录res

答案 1 :(得分:1)

txHash是程序中描述的res.data.userdata[x]的属性,错误明确指出Cannot read property 'txHash' of undefined,ergo,res.data.userdata[x]是未定义的,这意味着收到的搜索结果来自服务器的数据不包含任何数据,这又意味着您的搜索参数与数据库中的任何值都不匹配,因此是“找不到搜索结果”的情况,并且不应在后端引起任何错误情况就是如此。您应该在前端检查一下并妥善处理。

以这种方式记录结果并亲自检查结果:

console.log("Data: ", res.data);

答案 2 :(得分:0)

我不确定,但是看看您是否在构造函数中绑定了handleOnClick函数。有时这可能会带来不确定的错误。

this.handleOnClick=this.handleOnClick.bind(this);

请检查。

谢谢