【问题标题】:How can I receive data that was sent by express on functional component?如何在功能组件上接收 express 发送的数据?
【发布时间】:2025-11-22 18:05:01
【问题描述】:
function Header(props) {  
  const [ serverData, setServerData ] = useState({});

  fetch('http://localhost:4001/api')
      .then(res => res.json())
      .then((data) => {
        setServerData(data);
        console.log(data);
      });

  return (
      <div>{serverData}</div>
  );
}

我正在尝试制作这个功能性 React 组件以从 express api 获取数据。

我的代码编辑器一直关闭,我认为接收数据部分在循环中。

如何使这个功能组件只获取一次数据,而不使用 componentdidmount 或类类型组件。

我尝试了 useCallback,它对我不起作用..

【问题讨论】:

    标签: javascript node.js reactjs express


    【解决方案1】:

    如果你想这样做,请使用 useEffect 钩子。 If 将发生一次,除非依赖项发生变化(此处未列出依赖项)。

    function Header(props) {  
      const [ serverData, setServerData ] = useState({});
    
      useEffect(() => {
        fetch('http://localhost:4001/api')
          .then(res => res.json())
          .then((data) => {
            setServerData(data);
            console.log(data);
          });
      }, []);
    
      return (
          <div>{serverData}</div>
      );
    }
    

    【讨论】:

    • @Peppermintc 我建议先将 fetch 调用分离到另一个函数中,然后在 useEffect 钩子中调用它,因为它使其更具可读性和可重用性。尽管在当前上下文中很好,但是将来如果您需要添加更多的 fetch 调用,将很难阅读和理解。如果您以这种方式将所有 fetch 调用放在 useEffect 中,那么将来的代码会有点担心
    • 多么好的评论。为了更好的维护,我会记住这一点
    • 我同意了。只是为了回答他的问题,但我通常把这个放在 services/ 文件夹中