gpt4 book ai didi

javascript - Nextjs 中使用 getServerSideProps 进行动态路由

转载 作者:行者123 更新时间:2023-12-03 13:31:36 27 4
gpt4 key购买 nike

我正在尝试学习nextjs。正在努力解决 getServerSideProps 的路由问题.
使用免费的 API,我在 DOM 上显示了一个国家列表。我想动态链接到一个国家,并为该特定国家获取和显示数据。
到目前为止,这是我的代码

const Country = props => (
<Layout>
<h1>{props.country.name}</h1>
<span>{props.country.capital}</span>
</Layout>
);
export async function getServerSideProps(context) {
const { id } = context.query;
const res = await fetch(`https://restcountries.eu/rest/v2/name/${id}`);
const country = await res.json();

console.log(`Fetched place: ${country.name}`);
return { props: { country } };
}
export default Country;

  <div className='container'>
<Head>
<title>Countries List</title>
<link rel='icon' href='/favicon.ico' />
</Head>
<Layout>
<main>
<h1>
Countries{' '}
<span role='img' aria-label='world emoji'>
🌎
</span>
</h1>
<ul>
{countries.map(country => (
<li key={country.name}>
<Link href='/p/[id]' as={`/p/${country.name}`}>
<a>{country.name}</a>
</Link>
</li>
))}
</ul>
</main>
</Layout>
</div>
);

export async function getServerSideProps() {
// Call an external API endpoint to get posts.
const res = await fetch('https://restcountries.eu/rest/v2/all');
const countries = await res.json();

// By returning { props: posts }, the Blog component
// will receive `posts` as a prop at build time
return {
props: {
countries,
},
};
}

export default Home;

URL 动态路由正常。例如,当您单击阿富汗时,URL 显示 http://localhost:3000/p/Afghanistan .
但是,我的国家/地区组件不显示任何内容,并且 undefined打印到终端。
URL 示例和来自 URL 的响应: https://restcountries.eu/rest/v2/name/Afghanistan
{
name: "Afghanistan"
}
抱歉,如果有菜鸟问题。努力学习nextjs

最佳答案

export async function getServerSideProps(context) {
const { id } = context.query;
const res = await fetch(`https://restcountries.eu/rest/v2/name/${id}`);
const country = await res.json();

console.log(`Fetched place: ${country.name}`);
return { props: { country } };
}
您正在从上面的函数返回一个嵌套对象
    { props: { country:country } }
所以这个 Prop 将像这样附加到 Prop 上:
      `props.props`
这就是你应该如何实现
const Country = props => (
<Layout>
<h1>{props.props.country.name}</h1>
<span>{props.props.country.capital}</span>
</Layout>
);
更新
在 next.js 的早期版本中,我认为在版本 9 之后更新,我们没有使用 props 从服务器端功能返回.截至目前,正确的实现方式是
return {
props: {
countries,
},
};

关于javascript - Nextjs 中使用 getServerSideProps 进行动态路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61222726/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com