如何将实时数据输入 NextJS?

Posted

技术标签:

【中文标题】如何将实时数据输入 NextJS?【英文标题】:How to input realtime data into NextJS? 【发布时间】:2021-06-17 15:23:51 【问题描述】:

我刚开始学习 Next.js 框架。

我需要帮助来解决我现在不理解的问题。在普通的 Vanilla javascript 和 React 中,我可以使用 setInterval 方法在 html 中显示生成的 API。

我的 API每 3 秒更改一次数据。我想将这些可变数据合并到我的 Next.js 应用程序中。

下面我将这两个 API 组合成一个 props 来将数据传送到其他组件。

export async function getServerSideProps(context) 
    const [twoDApiRes, saveApiRes] = await Promise.all([
        fetch(_liveResult),
        fetch(_localTxt),
    ]);

    const [twoDApi, saveApi] = await Promise.all([
        twoDApiRes.json(),
        saveApiRes.text(),
    ]);

    // Regex
    let csv_data = saveApi.split(/\r?\n|\r/);

    // Loop through
    const retrieveData = csv_data.map((el) => 
        let cell_data = el.split(',');

        return cell_data;
    );

    return 
        props:  twoDApi, retrieveData ,
    ;

要知道的主要是你想每三秒在 Next.js getServerSideProps 中更改数据。

【问题讨论】:

创建自定义挂钩 【参考方案1】:

您可以使用useEffect钩子每3秒刷新一次数据。

// This function will return Promise that resolves required data
async function retrieveData() 
  // retrieves data from the server


function MyPage() 
  const [data, setData] = useState();
  const [refreshToken, setRefreshToken] = useState(Math.random());
  
  useEffect(() => 
    retriveData()
      .then(setData)
      .finally(() => 
        // Update refreshToken after 3 seconds so this event will re-trigger and update the data
        setTimeout(() => setRefreshToken(Math.random()), 3000);
      );
  , [refreshToken]);

  return <div>data?.name</div>

或者您可以使用带有refetchInterval: 3000 选项的react-query 库每3 秒重新获取一次数据。

这里是 an example,用于使用 react-query

【讨论】:

我很欣赏它与一个例子一起展示。你有什么优雅的方法来获取我有两个 api url 的数据吗? 您可以使用 Promise.all 并行调用 API 或在后端将请求合并为一个请求(以减少服务器端请求 = 更快的加载时间 = 更好的用户体验),但它需要更改后端.我可能会做你已经做过的事情,因为我懒得考虑更改后端以将加载时间减少 200 毫秒。 感谢您的澄清。我可以很好地理解你在上面解释了什么以及一个例子。我之所以选择“getServerSideProps”是因为我不希望最终用户的任何 api 请求端点能够通过使用浏览器控制台在网络分流器中看到我的 XHR 请求。否则他们将在没有任何确认的情况下使用我的 api。如果您像这样指导我如何在“ServerSideProps”中实现使用,那么我将非常高兴。 @PJK 不幸的是,使用 getServerSideProps 函数无法实现这一点,因为该函数仅在页面加载时运行。之后,您必须在客户端更新数据。如果您不想公开您的 api 密钥,您可以编写简单的 api 服务器函数(检查:nextjs.org/docs/api-routes/introduction)并在客户端调用该函数。 感谢您的解释,提供了非常有用的提示。

以上是关于如何将实时数据输入 NextJS?的主要内容,如果未能解决你的问题,请参考以下文章

如何手动更改firebase实时数据库、数据类型?

如何获取新浪实时股票行情数据

nextjs POST API 不能在实时环境中工作,但在本地环境中工作完美

将实时数据输入到 AnyLogic

如何在客户端 NextJS 中使用 Apollo GraphQL 订阅?

从firebase实时数据库IOS Swift中检索数据