我有一个非常基本的api,它所做的就是返回文本"Sunny day".

我使用create react app创建了一个react项目,并try 调用api一次,然后将结果打印到控制台.

这是react应用程序

import logo from './logo.svg';
import './App.css';

function App() {

  fetch('https://localhost:44386/weatherforecast')
  .then(response => response.text())
  .then(data => console.log(data));

  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p>
          Edit <code>src/App.js</code> and save to reload.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          Learn React
        </a>
      </header>
    </div>
  );
}

export default App;

问题是api在页面加载时被调用了两次

有人能解释为什么吗?

推荐答案

通常,如果您想执行一次,比如在加载页面时从api中提取一些内容,那么应该使用useEffect钩子和空的依赖项数组,如下所示:

React.useEffect(
 () => {
         fetch('https://localhost:44386/weatherforecast')
         .then(response => response.text())
         .then(data => console.log(data));
 }, []) // <--- empty dependency array

编辑:这也可能是由<StrictMode>引起的.它旨在使React在开发模式下呈现两次,以便为您提供如何改进代码和挂钩使用的建议.这可能就是你的应用程序渲染两次的原因!

Javascript相关问答推荐

原型链中的同一财产怎么会有不同的价值?

在JavaScript中打开和关闭弹出窗口

reaction useEffect KeyDown for each 条目配音输出

使用AJX发送表单后,$_Post看起来为空

Google Apps脚本中的discord邀请API响应的日期解析问题

将2D数组转换为图形

将本机导航路由react 到导航栏中未列出的屏幕?

html + java script!需要帮助来了解为什么我得到(无效的用户名或密码)

在带有背景图像和圆形的div中添加长方体阴影时的重影线

如何根据当前打开的BottomTab Screeb动态加载React组件?

在浏览器中触发插入事件时检索编码值的能力

有条件重定向到移动子域

在css中放置所需 colored颜色 以填充图像的透明区域

使用插件构建包含chart.js提供程序的Angular 库?

处理app.param()中的多个参数

如何找到带有特定文本和测试ID的div?

JavaScript将字符串数字转换为整数

与在编剧中具有动态价值的定位器交互

在JavaScript中将Base64转换为JSON

固定动态、self 调整的优先级队列