【问题标题】:How to import two component in Nextjs如何在 Nextjs 中导入两个组件
【发布时间】:2021-09-24 17:48:27
【问题描述】:

我创建了两个组件页眉和页脚。现在我已经直接调用了名为 index.js 文件的标头组件,工作正常。在工作页面下方附加标题部分 enter image description here

现在我想将页脚组件导入 index.js 文件但显示错误,需要在 http://localhost:3000/ 中的同一页面(即)首先显示 Herder 另一个页脚组件我错过了什么请你解决这个问题.我参考了更多参考资料,两天后发现了这个概念。

索引.js

import React from 'react';

     import Header from './header'
    import Footer from './footer'
     function Index({posts}) {
       return (
         <>
             <Header posts={posts}/>
             <Footer/> 
         </>
       )
     }
    
    export async function getServerSideProps() {
            const res = await fetch('https://jsonplaceholder.typicode.com/users')
            const posts = await res.json()
    
            return {
              props: {
                posts
              },
            }
          }
    
    export default Index;

Header.js

function Header(props) {
  return (
    <div Style="background: #f2e7d7;padding: 20px; border: 1px solid #eeca97;border-radius: 10px;">
    <h1>Header</h1>
    <p>
       {props.posts.map((post) =>(
         <>
          <span>{post.name}</span><span>/</span>
          </>
        ))}
    </p>
    </div>
  )
}

export default Header

页脚.js

import React from 'react';
 import FooterApi from './footerApi'
 function Footer({postTitle}) {
   return (
     <>
         <FooterApi postTitle={postTitle}/>
     </>
   )
 }

export async function getServerSideProps() {
        const res = await fetch('https://jsonplaceholder.typicode.com/posts')
        const postTitle = await res.json()

        return {
          props: {
            postTitle
          },
        }
      }

export default Footer;

footerApi.js

function FooterApi(props) {
    return (
      <div Style="background: #f2e7d7;padding: 20px; border: 1px solid #eeca97;border-radius: 10px;">
      <h1>Footer</h1>
      <p>
         {props.postTitle.map((post) =>(
           <>
            <span>{post.title}</span>
            </>
          ))}
      </p>
      </div>
    )
  }
  
  export default FooterApi

【问题讨论】:

  • 但显示错误 - 这不是很有帮助。请包括正在显示的确切错误。
  • postTitle 应该是什么?它似乎是未定义的,但你试图映射它,就好像它是一个数组
  • 是的 postTitle 未定义,我需要显示此页面localhost:3000 第一个页眉和页脚组件。
  • 你不能链接到你机器的本地端口...它只会为你工作

标签: reactjs next.js


【解决方案1】:

问题是您在组件而不是页面内部调用getServerSideProps()

要解决此问题,您可以在 index.js getServerSideProps() 中获取您的数据(postTitle),然后像您对页眉所做的那样将其传递给页脚

你的 index.js 应该看起来像这样(我刚刚替换了你的代码)

import React from 'react';

import Header from './header';
import Footer from './footer';
function Index({ posts, postTitle }) {
  return (
    <>
      <Header posts={posts} />
      <Footer postTitle={postTitle} />
    </>
  );
}

export async function getServerSideProps() {
  const res = await fetch('https://jsonplaceholder.typicode.com/users');
  const posts = await res.json();
  const resFooter = await fetch('https://jsonplaceholder.typicode.com/posts');
  const postTitle = await resFooter.json();
  return {
    props: {
      posts,
      postTitle,
    },
  };
}

export default Index;

还有你的 footer.js

import React from 'react';
 import FooterApi from './footerApi'
 function Footer(props) {
   return (
     <>
         <FooterApi postTitle={props.postTitle}/>
     </>
   )
 }

export default Footer;

【讨论】:

  • 请您更正我的代码。我参考更多参考无法解决此问题,请帮助我
  • 可以在 index.js 内的 getServerSideProps 中调用两次
  • @karthik 我用代码更新了答案
  • 感谢您对这一行的帮助
    显示错误 ReferenceError: postTitle is not defined
  • 更改为
    。我会更新代码
猜你喜欢
  • 2023-02-25
  • 1970-01-01
  • 2022-11-07
  • 1970-01-01
  • 2018-10-09
  • 2021-06-05
  • 2020-02-13
  • 1970-01-01
  • 2020-11-06
相关资源
最近更新 更多