REACTJS 使用 fetch 通过 const 传递变量

Posted

技术标签:

【中文标题】REACTJS 使用 fetch 通过 const 传递变量【英文标题】:REACTJS Pass variable through const using fetch 【发布时间】:2021-07-01 22:59:24 【问题描述】:

我的函数在这里从我正在使用的 openweather API 中获取一些东西。

const [ForecastFind, setForecastFind] = useState(null)
useEffect(() => 
  fetch(
    'https://api.openweathermap.org/data/2.5/onecall?lat=22&lon=151&exclude=current,minutely,daily&APPID=TOKEN',
  )
    .then(response => response.json())
    .then(data => setForecastFind(data.hourly[0].dt))
, [])

当我像这样使用它时效果很好:

<div className="DescriptionsSplitter" style= marginTop: '-20vh' >
  ForecastFind
</div>

我要做的是让它传入一个变量,这样我就可以通过函数访问我想要的任何索引。 (data.hourly[0] ,我得到第一个项目)

我尝试过的是:这显然不是正确的语法,但我不确定正确的语法是什么。

const [ForecastFind, setForecastFind] = useState(null)
useEffect(choose => 
  var choose = 0
  fetch(
    'https://api.openweathermap.org/data/2.5/onecall?lat=22&lon=151&exclude=current,minutely,daily&APPID=TOKEN',
  )
    .then(response => response.json())
    .then(data => setForecastFind(data.hourly[choose].dt))
, [])

尝试将 const 与变量一起使用:

<div className="DescriptionsSplitter" style= marginTop: '-20vh' >
  ForecastFind(1)
</div>

【问题讨论】:

【参考方案1】:

useEffect 不会在回调函数中传递任何参数。您可以做的是将整个数据存储在 ForecastFind 状态并调用一个函数来访问您需要的内容

const [ForecastFind, setForecastFind] = useState(null);
  useEffect(() => 
      var choose = 0;
      fetch('https://api.openweathermap.org/data/2.5/onecall?lat=22&lon=151&exclude=current,minutely,daily&APPID=TOKEN')
          .then(response => response.json())
          .then(data => setForecastFind(data.hourly));

  , []);

const getForecast = (choose) => 
    return ((ForecastFind || )[choose] || ).dt || null;

...

 <div className="DescriptionsSplitter" style=marginTop:'-20vh'>
      getForecast(1)
 </div>

【讨论】:

@Quentin 更新了帖子以处理该问题。但是,如果在获取数据之前不呈现依赖于 ForecastFind 的任何内容,则可以更好地处理,这是我假设 OP 根据他的帖子已经在做的事情 这行得通,但由于某种原因 getForecast(0) 得到了第 3 项而不是第 1 项。一切都在索引中向前移动了 2。 万一你在某处改变了预测数组 我不在任何地方,我发布的上述代码在获取第 0 个索引项时有效。超级诡异 记录 ForecastFind 数组并查看它是否记录了正确的数据可能是有意义的【参考方案2】:

ForecastFind 不是函数,因此您不能传入参数。 我建议像setForecastFind(((data.hourly))) 一样将整个 data.hourly 数组存储在 ForecastFind 中。 然后就可以这样访问了-

<div className="DescriptionsSplitter" style=marginTop:'-20vh'>
   ForecastFind[1].dt
</div>

【讨论】:

以上是关于REACTJS 使用 fetch 通过 const 传递变量的主要内容,如果未能解决你的问题,请参考以下文章

在 ReactJS 中使用 fetch 上传状态错误

使用API​​时如何通过reactjs传递JsonWebToken x-access-token?

类型错误:在 reactjs 中使用 fetch 读取 json 时未定义项目

addEventListener('fetch', callback) 在 ReactJS 中永远不会触发回调

如何在使用API 时通过reactjs传递JsonWebToken x-access-token?

ReactJS 中的 Axios 与 Fetch [关闭]