下面是位于“Pages/home.js”的代码。// localhost:3000/home
import axios from 'axios';
import Section1 from '../components/home-sections/section-1';
const Homepage = ({ show }) => {
const Html = JSON.parse(show.response.DesktopHTML);
const renderSection = () => {
return Html.map((itemData,index)=>{
return(<div key={index}>{itemData.DisplayName}</div>)
})
}
return(
<div>
{ renderSection()}
<Section1 />
</div>
)
}
export const getServerSideProps = async ({ query }) => {
try {
const response = await axios.get(
`https://api.example.com/getHomeSection?title=Section 1`
);
return {
props: {
show: response.data,
},
};
} catch (error) {
return {
props: {
error: error.error,
},
};
}
};
export default Homepage;
现在,我将相同的代码添加到section-1.js中,此文件位于“components/home-sections/section-1.js
”
现在,getServerSideProps
在home.js中工作正常,但在section-1.js中不工作。
Error: TypeError: show is undefined in section-1.js
3条答案
按热度按时间9lowa7mx1#
不能在非页面组件中使用
getServerSideProps
。您可以将prop从Home
传递到HomeSection
,也可以创建一个上下文,以便可以从组件树全局使用该值getServerSideProps只能从页面导出。不能从非页面文件导出。
https://nextjs.org/docs/basic-features/data-fetching#only-allowed-in-a-page-2
x8diyxa72#
getServerSideProps
只能从页面组件导出。它不会在导入到页中的组件上运行。但是,您可以从返回props的组件导出一个函数,然后从页面的
getServerSideProps
函数调用该函数。1.在组件上创建
getServerSideProps
函数。1.在页面的
getServerSideProps
函数中,调用组件的getServerSideProps
函数,并将组件中的props与页面中的props合并。iq3niunx3#
getServerSideProps不能在组件中工作,它只需要在页面上实现,如果你使用的是下一个.js-13应用目录,它也不能在那里工作,你需要使用pages目录
在app目录中,您只需要在第一行为客户端组件写入
use client
,而为服务器组件留空