You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中Fetch获取JSON后验证jobNumber存在性的问题

解决方法:检查JobNumber是否存在并跳转

首先,我看到你代码里有几个容易踩的小坑,咱们一步步捋清楚解决:

1. 先修复Fetch的Promise链问题

你在第一个then里调用了response.json()但没返回它,导致第二个then拿到的myJson是undefined,这是最容易忽略的细节,得补上return:

.then((response) => {
  return response.json(); // 必须返回解析后的JSON,下一个then才能拿到数据
})

2. 用some()替代map()做存在性检查

map()是用来遍历转换数组的,如果你只是要判断「有没有符合条件的项」,用Array.some()更合适——它找到第一个匹配项就会停止遍历,性能更高。另外你之前的代码只是访问了this.state.numberExists,但没更新状态,React的状态必须通过setState修改,直接赋值不会触发组件更新。

3. 在状态更新后执行跳转

因为setState是异步操作,所以要在它的回调函数里处理页面跳转,确保状态已经更新完成。

完整修正后的代码:

fetch('http://orhapi.azurewebsites.net/api/services/LoadJobs?type=all', {
  method: 'GET',
  headers: { // 注意这里是headers,不是header,拼写错误会导致请求异常!
    'Content-Type': 'application/json',
  },
})
.then((response) => {
  return response.json(); // 修复:返回解析后的JSON数据
})
.then((myJson) => {
  // 提取返回数据中的JobsModel数组
  const jobList = myJson.ArrayOfJobsModel.JobsModel;
  // 检查jobNumber是否存在于某个JobsModel的Name字段中
  const isExists = jobList.some(job => job.Name === this.state.jobNumber);
  
  // 更新状态,并在回调中执行跳转逻辑
  this.setState({ numberExists: isExists }, () => {
    if (this.state.numberExists) {
      // 跳转到StockItem页面并传递参数,这里假设用React Router的history跳转
      this.props.history.push({
        pathname: '/StockItem',
        state: { jobNumber: this.state.jobNumber } // 用state传递参数更安全
      });
      // 如果是其他路由方式,替换成对应的跳转逻辑即可
    }
  });
})
.catch((err) => {
  alert('could not connect to server');
});

额外注意点:

  • 不要直接修改this.state(比如你之前写的this.state.numberExists;是无效操作),必须通过setState更新状态,React才能感知到变化并触发组件更新。
  • some()方法直接返回布尔值,完美匹配我们「是否存在」的判断需求,比map更简洁高效。

内容的提问来源于stack exchange,提问作者Omri Ram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:02:04