【发布时间】:2020-07-11 04:34:02
【问题描述】:
我想创建一个 React Context 并将 state 和 setState 属性 useState 挂钩到消费者。
我有一个Step 和一个Context 类型:
type Step = {
step: string;
};
type Context = {
step: Step;
setStep: Dispatch<SetStateAction<Step>>;
};
我创建了一个上下文:
export const StepContext = createContext<Context | undefined>(undefined);
我创建了一个StepProvider 和一个钩子:
const StepProvider = ({ children }: { children: ReactNode }) => {
const [step, setStep] = useState<Step>({ step: 'one' });
return <StepContext.Provider value={{ step, setStep }}>{children}</StepContext.Provider>;
};
我创建了一个StepConsumer:
const StepConsumer = () => {
const { step, setStep } = useContext(StepContext);
return <div>{...}</div>;
};
但在:
const { step } = useContext(StepContext)
step 和setStep 返回以下错误TS2339: Property 'step' does not exist on type 'Context | undefined'
我没有以正确的方式传递类型吗?
谢谢
【问题讨论】:
-
上下文类型由初始值决定。要排除
undefined,您可以将上下文封装在自定义挂钩中,如this answer 中所述。
标签: reactjs typescript typescript-typings