【问题标题】:How can I use dynamic Menu Component in next.js如何在 next.js 中使用动态菜单组件
【发布时间】:2021-06-07 15:11:20
【问题描述】:

伙伴。我的 next.js 网络应用中有一个 菜单组件。菜单的数据通过 GraphQL 动态获取。我想要菜单组件的服务器端渲染。我尝试使用 getStaticProps() 在服务器上呈现数据。但是 getStaticProps() 对组件不起作用,它只对页面起作用。

现在,我该如何解决这个问题?我不想在每个页面上为菜单复制相同的代码,我想重复使用代码或类似的东西。请帮助我摆脱这个问题。提前致谢。

这是我的菜单渲染代码:

导出异步函数 getStaticProps() { 常量客户端 = 新的 ApolloClient( {uri:'http://portfolio.local/graphql',缓存:新的 InMemoryCache()} ); const {data} = 等待客户端.query({ 查询:gqlquery 我的查询{ 菜单项 { 边{ 节点{ ID 标签 } } } } }); 返回 { 道具: { 菜单:data.menuItems.edges } } }

【问题讨论】:

    标签: javascript reactjs graphql next.js


    【解决方案1】:

    为什么不直接在前端调用数据?没有“getStaticProps”或“getServerSideProps” 正如你所说,它是一个菜单,所以数据对 SEO 来说并不重要。

    function MenuComp() {
    const [data, setData] = React.useState()
      
    React.useEffect(async ()=>{
      const client = new ApolloClient(
            {uri: 'http://portfolio.local/graphql', cache: new InMemoryCache()}
        );
    
        const {data} = await client.query({
    
        query:gqlquery
            MyQuery{
                menuItems {
                    edges {
                        node {
                            id 
                            label
                        }
                    }
                }
            }
    
        });
       setData(data)
    },[])
    
    return (...your component)
    }
    
    

    【讨论】:

    • 是的,菜单对 SEO 来说并不重要。但是我想学习,我想知道是否有任何选项可以做到这一点。
    • getServerSideProps 和 getStaticProps 只能从页面导出。因此,您不能使用它们来获取动态菜单组件的数据。我认为您可以将菜单链接到您的持久布局组件并在客户端获取数据
    • 谢谢。如果我在 _app.js 中使用 getInitialProps() 来呈现菜单,它就可以完美地工作。也许它也是SSR。但我不知道这是否是一个好习惯。我在正确的道路上吗?
    • getInitialProps 不推荐在 Next JS 中获取数据。肯定是 SSR 否则不是动态的。我会坚持我的选择,直接在前端获取数据。我看不到 SSR 的用途。
    猜你喜欢
    • 1970-01-01
    • 2018-04-05
    • 2018-04-14
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    相关资源
    最近更新 更多