Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Algolia和Next.js-索引更新和getStaticProps的副作用_Reactjs_Next.js_Server Side Rendering_Algolia - Fatal编程技术网

Reactjs Algolia和Next.js-索引更新和getStaticProps的副作用

Reactjs Algolia和Next.js-索引更新和getStaticProps的副作用,reactjs,next.js,server-side-rendering,algolia,Reactjs,Next.js,Server Side Rendering,Algolia,我有一个相当复杂的Next.js站点,大部分是静态呈现的,我正在将Algolia搜索添加到该站点中。他们要求您使用他们的API,并在每次发布时通知他们其他内容 我的问题是在下一个应用程序中,您在哪里通知Algolia。考虑到我的站点正在使用getStaticProps获取数据,我认为这是通知和更新Algolia的合乎逻辑的地方。它可以工作,但不知道其他人做了什么、最佳实践、权衡等 生命周期如下所示: 通过GraphQL从数据库获取数据(使用无头CMS Prismic) 在发送到Algolia之

我有一个相当复杂的Next.js站点,大部分是静态呈现的,我正在将Algolia搜索添加到该站点中。他们要求您使用他们的API,并在每次发布时通知他们其他内容

我的问题是在下一个应用程序中,您在哪里通知Algolia。考虑到我的站点正在使用
getStaticProps
获取数据,我认为这是通知和更新Algolia的合乎逻辑的地方。它可以工作,但不知道其他人做了什么、最佳实践、权衡等

生命周期如下所示:

  • 通过GraphQL从数据库获取数据(使用无头CMS Prismic)
  • 在发送到Algolia之前,规范化Next中的数据
  • 向Algolia发送数据(他们的系统协调旧记录/新记录,并引用uuid)
实现这一点的代码:

//使用nextjs getStaticProps,解构默认参数
导出异步函数getStaticProps({params,preview=false,previewData}){
//数据获取(假设getAllNewsForLandingPage获取一个obj数组)
pageData.data=等待getAllNewsForLandingPage(params.uid,previewData)
//格式化和规范化结果
常量algoliaFormattedData=dataFormatter(pageData.data)
//将数据发送回Algolia,Algolia将自动协调新旧数据
等待AlgoliaIndex.saveObjects(algoliaFormattedData)
}

在您的场景中,我很想有一个单独的、独立的脚本,例如在
预构建时执行此操作。这样,您的下一个应用程序就可以专注于前端(因此可以获取数据),并且您拥有独立的脚本,在这里您可以更自由地处理其他问题。getStaticProps的优点是您可以享受增量静态生成。如果您需要ISG,您可以保持代码的原样,这样您的更新只在人们实际查询这些数据时进行。为了避免阻止渲染,您可以删除
wait
,并尝试以某种方式将更新排队。例如,您可以将问题改为“getStaticProps中的副作用”,以便更详细generic@EricBurel-是的,我想到了一个无服务器函数,它在构建时被调用来管理更新。这样可能会更干净一些,谢谢你的洞察力。我仍然在想,是否需要与Next更加协调,才能真正正确地工作。无服务器函数如何知道构建何时发生?通过使用
prebuild
脚本,可以保证
warn run build
将首先运行预构建脚本,这是我所知道的最好的方法。Next中没有太多用于检测事件的钩子。对于无服务器功能部分,可能这一讨论是相关的:(它说,如果您想调用自己的Next.js API路由,您可能只想重用代码)@EricBurel-有趣的选项。。。。我将在不久的将来尝试一下,谢谢你的帮助。