首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Storyblok响应桥重新启动数据更改预览

Storyblok响应桥重新启动数据更改预览
EN

Stack Overflow用户
提问于 2022-06-28 07:31:20
回答 1查看 221关注 0票数 0

我想将新的Storyblok反应桥与Next.js结合使用。在我的示例中,_app.js中直接有一个组件(它不应该在路由更改之间更改),因此如下所示:

代码语言:javascript
复制
function MyApp({ Component, pageProps: { pageData, globalData } }) {
  const story = useStoryblokState(globalData.story)
  console.log('rendering app')
  return (
    <>
      <Collage story={story} />
      {/* <Component {...pageData} /> */}
    </>
  );
}

相应的getStaticProps如下所示:

代码语言:javascript
复制
export async function getStaticProps() {
  let sbParams = {
    version: "draft", // or 'published'
  };

  const storyblokApi = getStoryblokApi();
  let { data: pageData } = await storyblokApi.get(`cdn/stories/home`, sbParams);
  let { data: globalData } = await storyblokApi.get(
    `cdn/stories/collage`,
    sbParams
  );

  return {
    props: {
      pageData,
      globalData,
    },
    revalidate: 3600,
  };
}

在这里,一切都按预期的方式工作(例如,对数据的更改只会改变拼贴组件,而不会触及任何其他组件),但是一旦我取消了主组件的注释,在Storyblok预览版(使用localhost:3000)中,更改任何数据都会重新启动iFrame,就像不使用React桥一样。我甚至可以看到,数据更改是在重新启动之前应用的。知道怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-29 09:55:38

useStoryblokState()从@storyblok/js包中调用useStoryblokBridge()。尽管它的名字,useStoryblokBridge()不是一个反应钩子,而是一个普通的功能,有副作用。它订阅来自Storyblok桥这里的事件。如果作为参数传递的故事不是通过Storyblok桥发送给事件侦听器的故事,则事件侦听器将重新加载整个页面。

https://github.com/storyblok/storyblok-js/blob/main/lib/index.ts#L40

这意味着,如果使用两个不同的层调用useStoryblokBridge(),则窗口将重新加载。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72782360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档