我一直在为一个投资组合网站使用TypeScript进行Next.js项目。在我的Home功能组件中,我试图使用useState钩子初始化状态,并从组件的props设置初始值。组件签名看起来像:
type Props = {
pageInfo: PageInfo;
experiences: Experience[];
skills: Skill[];
projects: Project[];
socials: Social[];
};
export default function Home(props: Props){
const [pageInfo, setPageInfo] = useState<PageInfo>(props.pageInfo);
const [experiences, setExperiences] = useState<Experience[]>(props.experiences);
const [skills, setSkills] = useState<Skill[]>(props.skills);
const [projects, setProjects] = useState<Project[]>(props.projects);
const [socials, setSocials] = useState<Social[]>(props.socials);
useEffect(() => {
async function fetchData() {
if (!projects || projects.length === 0) setProjects(await fetchProjects());
if (!socials || socials.length === 0) setSocials(await fetchSocials());
if (!skills || skills.length === 0) setSkills(await fetchSkills());
if (!experiences || experiences.length === 0) setExperiences(await fetchExperiences());
if (!pageInfo || Object.keys(pageInfo).length === 0) setPageInfo(await fetchPageInfo());
}
fetchData();
}, []);
字符串
当尝试使用vercel编译和部署时,我遇到了一个与props类型相关的TypeScript错误。
这里是错误
第一个月
有什么不同的方法,我可以初始化这些 prop 在家里,并有他们传递到不同的功能组件。
目前,代码在运行'npm run dev
'时进行编译,但使用vercel时,构建是使用'npm run build
'运行的,我得到了类型错误。
理想情况下,我想使用GetStaticProps或GetServerSideProps,然而,next.js的page.tsx文件位于src/app路由器目录中。如果我将其从src目录中移出,并将其放入单独的pages目录中,我会得到404 page not found错误(即使在重建后)。
2条答案
按热度按时间uurity8g1#
你能像这样修改你的函数吗?
字符串
相反
型
f0ofjuux2#
很简单。
type
或interface
并将其导出。据我所知,没有“默认”导出类型的方法,因此始终使用带命名导入/导出的类型。我个人和专业地从我最初使用的文件中导出了type
或interface
。通常情况下,类型 * 不 * 太通用,不值得放在单独的types.ts
文件中,但有些人更喜欢以这种方式模块化。因此,如果一个类型(如Props
)在多个文件中使用,您可以在您使用的任何文件中定义它(同时导出它以便在其他文件中使用),或者在src/types.ts
文件中定义并导出类型,然后在任何地方重用它。在我看来,如果项目足够小,我会选择前者。导出类型。
字符串
正确导出后,可以使用以下行导入到其他功能组件中:
型