前提・実現したいこと
Contextを使用してboolean型のフラグ管理をしようと考えています
発生している問題・エラーメッセージ
TypeScript error in /src/components/Header.tsx(15,33): Cannot invoke an object which is possibly 'undefined'. TS2722
該当のソースコード
LogoFlugProvider.tsx
1import { createContext, useState, FC } from "react"; 2 3type Props = { 4 logoFlug: boolean, 5 setLogoFlug: Function, 6}; 7export const LogoFlugContext = createContext<Partial<Props>>(({})); 8 9 10export const LogoFlugProvider: FC = props => { 11 const { children } = props; 12 13 const [ logoFlug, setLogoFlug ] = useState(false); 14 15 return ( 16 <LogoFlugContext.Provider value={{ logoFlug, setLogoFlug }}> 17 { children } 18 </LogoFlugContext.Provider> 19 ); 20}; 21
該当のソースコード
Header.tsx
1import { FC, useContext } from 'react'; 2import { LogoFlugContext } from '../providers/LogoFlugProvider'; 3 4export const Header: FC = () => { 5 6 7 const { logoFlug, setLogoFlug } = useContext(LogoFlugContext); 8 console.log(logoFlug); 9 const onClickSwitch = () => setLogoFlug(!logoFlug); 10 11 12 13 return ( 14 <header> 15 <button onClick={onClickSwitch}>テスト</button> 16 </header> 17 ); 18}; 19
補足情報
TypeScriptを使用しない場合動作することは確認しました。
LogoFlugProvider.tsxにtype Props = {
logoFlug: boolean,
setLogoFlug: Function,
};
を宣言しましたがvalue={{ logoFlug, setLogoFlug }}がなぜかsetLogoFlug?: Function | undefinedとなってしまい
Header.tsxでsetLogoFlugが使用できません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/06 01:32
退会済みユーザー
2021/11/06 01:37