当前位置: 首页 > 知识库问答 >
问题:

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

谭玉泽
2023-03-14

我试图为我的浏览器创建一个定制的主页。我已经实现了一个API来显示天气,但只有当我按下回车键时才能工作。我想在加载页面时自动显示数据,不按回车键,自动显示布里斯托尔天气,当我键入另一个位置时,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个答案

龙俭
2023-03-14

尝试在useffect中包装fetch调用:

  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=是冗余的

其他资源:

  • Robin Wieruch:如何使用React钩子获取数据?https://www.robinwieruch.de/react-hooks-fetch-data

袁单鹗
2023-03-14
useEffect( () => search(), [])  
 类似资料:
  • 问题内容: 我才刚开始做出反应,我有点迷茫。我正在尝试制作一个登录页面并发出一个http发布请求。现在,我只是想使任何类型的HTTP请求都能正常工作,所以我使用了请求bin,并在文档中找到了针对npm软件包的这一基本操作(https://www.npmjs.com/package/redux -react-fetch ): 那么,写完一个动作之后,我该怎么办?我实际上如何让我的应用程序调用并使用该

  • 我用python制作了我的rest api,现在我想在客户端部分对其进行测试。我不是很擅长javascript,但我写了这段代码,当按钮被点击时,这使得api请求。但是,当我按下按钮时,应用程序向我显示了这个错误: 我知道这个问题可能很愚蠢,但是如果你知道我做错了什么,请告诉我。我真的很感激! 以下是我的代码:html: script.js:

  • 问题内容: 我在iBooks中阅读了Apple的The Programming Language Swift ,但无法弄清楚如何在Swift中发出HTTP请求(例如cURL)。我需要导入Obj- C类还是只需要导入默认库?还是无法基于本机Swift代码发出HTTP请求? 问题答案: 您可以使用,而且还是因为你通常在Objective- C做。请注意,对于iOS 7.0和更高版本,它是首选。 使用

  • 我在iBooks上读过Apple的编程语言Swift,但不知道如何在Swift中发出HTTP请求(类似于cURL)。我需要导入Obj-C类还是只需要导入默认库?或者不可能基于本机Swift代码发出HTTP请求?

  • 我在iBooks中阅读了苹果公司的编程语言Swift,但不知道如何在Swift中发出HTTP请求(类似cURL的东西)。我需要导入Obj-C类还是只需要导入默认库?还是不能基于原生Swift代码进行HTTP请求?

  • 问题内容: 如何在node.js中使用数据发出出站HTTP POST请求? 问题答案: 这是一个使用node.js向Google Compiler API发出POST请求的示例: 我已经更新了代码,以显示如何从文件而不是硬编码的字符串发布数据。它使用async 命令来实现此目的,并在成功读取后发布实际代码。如果有错误,则抛出该错误,如果没有数据,则该过程以负值退出以指示失败。