前提
TypeScript学習中に2つの問題に詰まったので質問させていただきました。
実現したいこと
- 1.propsで値を受け取れないので、値を受け取れるようにしたい。
- 2.propsに値がない場合はmapを使用した条件分岐で定型文を表示したいが、「JSX コンポーネントとして使用することはできません。その戻り値の型 'void' は、有効な JSX 要素ではありません。」と怒られる。
該当のソースコード
index.tsx import { useTranslation } from 'react-i18next'; import { TEMPLATE } from 'src/Template'; import { Box, Button, Typography } from '@mui/material'; import { ThemeProvider } from '@mui/material/styles'; type MsgProps = { msg: string; }; export const TestMessages = (props: MsgProps) => { const { t } = useTranslation(); const MSG = () => { if (props.msg) { props.msg.split(/(?<=。)/).map((item, index) => { return ( <div key={index}> {item} <br /> </div> ); }); } else { t(TEMPLATE.TEXT.SECOND).split(/(?<=。)/).map((item, index) => { return ( <div key={index}> {item} <br /> </div> ); }); } }; return ( <ThemeProvider> <Box> <Typography><MSG /></Typography> </Box> </ThemeProvider> ); };
MsgProps.tsx import { TestMessages } from './TestMessages'; export const MsgProps = () => { return ( <TestMessages msg={'テキスト01テキスト01'} /> ); };
Template.ts export const TEMPLATE = { TEXT: { SECOND: 'テキスト02テキスト02', }, };
試したこと
MsgProps.tsxをindex.tsxでインポートしたりしてもダメでした。
「JSX コンポーネントとして使用することはできません。その戻り値の型 'void' は、有効な JSX 要素ではありません。」に関しても「MSG」の条件分岐でreturn nullを返すとエラーは出なくなるのですが、値が表示されません。mapは配列を返さないと行けないようなのですが、どう直せば良いか分からず...。
回答1件