为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 React 中自动发出 API 请求?

如何在 React 中自动发出 API 请求?

婷婷同学_ 2024-01-18 16:07:33
我正在尝试为我的浏览器创建自定义主页。我已经实现了一个 API 来显示天气,但只有当我按 Enter 时才有效。我想在加载页面时自动显示数据,无需按 Enter 键,自动显示布里斯托尔天气,当我输入另一个位置时,API 将能够请求和呈现。我尝试了很多方法,例如(删除钩子,更改钩子的初始状态,但似乎没有任何效果)这是我的代码:    const [query, setQuery] = useState('Bristol');    const [weather, setWeather] = useState({});const search = async () => {    fetch(`${api.base}weather?q=${query}&units=metric&APPID=${api.key}`)    .then(res => res.json())    .then(result => {        setWeather(result);        setQuery('')        console.log(result)    });}    return(        <div className="app">            <main>                <div className="search-box">                    <input                        type="text"                        className="search-bar"                        placeholder="Search..."                        onChange={e => setQuery(e.target.value)}                        value={query}                        onKeyPress={search}                    />                </div>                {(typeof weather.main != "undefined") ? (                    <div>                    <div className="location-box">                        <div className="location">{weather.name}</div>                        <div className="date">{dateBuilder(new Date())}</div>                    </div>                        <div className="weather-box">                            <div className="temp">                                {Math.round(weather.main.temp)}                            </div>                            <div className="weather">                                {weather.weather[0].main}                            </div>                        </div>                    </div>                ) : ('')}            </main>        </div>    )} 我是 ReactJS 的新手,这有点令人困惑,因为在这里我使用相同的文件进行编码和渲染,我之前这样做过,但我使用的是带有 Express 的纯 JavaScript 等......并且我渲染为 HTML。
查看完整描述

2 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

useEffect( () => search(), [])



查看完整回答
反对 回复 2024-01-18
?
达令说

TA贡献1821条经验 获得超6个赞

尝试将调用fetch包装在useEffect:


  useEffect(() => {

    fetch(`${api.base}weather?q=${query}&units=metric&APPID=${api.key}`)

      .then((res) => res.json())

      .then((result) => {

        setWeather(result);

        console.log(result);

      });

  }, [query]);

第二个参数是所谓的依赖数组。每当其内容发生更改时,效果都会重新运行,请参阅https://reactjs.org/docs/hooks-effect.html

也删除,onKeyPress={search}因为它是多余的onChange={e => setQuery(e.target.value)}

更多资源:


查看完整回答
反对 回复 2024-01-18
  • 2 回答
  • 0 关注
  • 33 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信