我在Next.js v13.4.12中的app\page.tsx
处有一个组件,包含一个按钮。当我点击它时,我希望它调用handleClick
函数。
但是函数getInitialProps
没有被调用,也没有向Page组件发送props,我该怎么办?
事实上,我想当页面第一次呈现时,即使我们没有点击按钮,数据也会呈现在页面上。
'use client'
import { useState } from 'React';
export default function Page({ initialData }) {
const [data, setData] = useState(initialData);
const fetchData = async () => {
const req = await fetch('https://randomuser.me/api/?gender=male&results=100');
const newData = await req.json();
return setData(newData.results);
};
const handleClick = (event) => {
event.preventDefault();
fetchData();
};
return (
<Layout>
<button onClick={handleClick}>FETCH DATA</button>
{data.map((user) => {
return (
<div>
{user.email}
<img src={user.picture.medium} alt="" />
</div>
);
})}
</Layout>
);
}
Page.getInitialProps = async () => {
const req = await fetch('https://randomuser.me/api/?gender=female&results=10');
const data = await req.json();
return { initialData: data.results };
};
字符串
2条答案
按热度按时间rt4zxlrg1#
像
getServerSideProps
和getStaticProps
这样的方法用于在服务器上获取数据,但它们只对pages
文件夹中的页面组件有效(在Next.js中设置路由的初始方式)。从Next.js 13开始,在
app
目录中,我们有服务器组件,在那里你可以直接在组件体中获取数据,在那里你想要实现的将如下所示(注意创建的附加文件):字符串
您需要下面的附加组件,因为您需要客户端交互(这里是一个
onClick
处理程序),而在上面的服务器Page
组件中没有。型
否则,因为你的页面已经是一个顶部有
"use client"
的客户端组件,你可以简单地使用useEffect
来加载初始数据,如下所示:型
lg40wkob2#
getInitialProps
现在是一个遗留API,文档建议使用getStaticProps
和getServerSideProps
。但由于app router不支持这两种方法,请尝试以下操作:创建一个服务器组件作为父组件,从中获取初始数据,然后将其传递给客户端组件,在客户端组件中可以处理所有客户端操作。
服务器组件
字符串
客户端组件
型