您没有使用提取的数据更新上下文值。您应该将简历数据保持在
ResumeContextProvider
并在获取完成时更新该状态。以下是更正后的版本:
import React, { createContext, useContext, useEffect, useState, PropsWithChildren, Fragment } from 'react';
const ResumeContext = createContext<ResumeJson | undefined>(undefined);
export function useResumeContext() {
const context = useContext(ResumeContext);
return context;
}
function ResumeLoader({ setResume }: { setResume: (resume: ResumeJson) => void }) {
useEffect(() => {
async function getResumeJson() {
const response = await fetch("resume.json");
const data: ResumeJson = await response.json();
return data;
}
getResumeJson().then((data) => {
setResume(data);
console.log(data);
});
}, [setResume]);
return <Fragment></Fragment>;
}
export default function ResumeContextProvider({ children }: PropsWithChildren) {
const [resume, setResume] = useState<ResumeJson | undefined>(undefined);
return (
<ResumeContext.Provider value={resume}>
<ResumeLoader setResume={setResume} />
{children}
</ResumeContext.Provider>
);
}
注意,我添加了
setResume
道具到
ResumeLoader
并将简历包装在
简历上下文提供程序
。现在,什么时候
getResumeJson
获取数据,它将更新状态,并使用
useResumeContext
将使用新数据重新渲染。