我有layout.jsx
分,如下所示:
import { Inter } from 'next/font/google';
const inter = Inter({ subsets: ['latin'] });
import { Analytics } from '@vercel/analytics/react';
import Bootstrap from '../pages/components/bootstrap';
import Navbar from '../pages/components/Navbar';
export default function RootLayout({ children }) {
return (
<html lang='en'>
<body className={inter.className + ' container'}>
<Bootstrap></Bootstrap>
<Navbar></Navbar>
{children}
<Analytics />
</body>
</html>
);
}
并拥有pages/news.tsx
个,如下所示:
import DataClient from '../lib/data/DataClient';
import NewsItem from './components/NewsItem';
import RssFeedItem from '../lib/data/models/RSSFeedItem';
import RootLayout from './components/layout';
type NewsProps = {
rssFeeds: RssFeedItem[];
};
export default function News({ rssFeeds }: NewsProps) {
const items = rssFeeds.map((item) => {
return <NewsItem key={item.id} item={item}></NewsItem>;
});
return <div>{items}</div>;
}
News.getLayout = function getLayout(page) {
console.log('getlayout');
return <RootLayout>{page}</RootLayout>;
};
export const getServerSideProps = async () => {
const dataClient = new DataClient();
const limit = 50;
const skip = 0;
const rssFeeds = await dataClient.getRssFeedItems(limit, skip);
// Convert isoDate properties to serializable format (string)
const rssFeedsSerialized = rssFeeds.map((feed) => ({
...feed,
isoDate: feed.isoDate.toISOString(),
created_at: feed.created_at.toISOString(),
updated_at: feed.updated_at.toISOString()
}));
return {
props: {
rssFeeds: rssFeedsSerialized
}
};
};
但是News.getLayout
不会被解雇,并且/news
URL没有显示RootLayout
中的Navbar
组件.我是不是漏掉了什么?