第5章 条件付きレンダー
React における条件付きレンダーは、JavaScript における条件分岐と同じように動作します。
type GreetingProps = {isLoggedIn: boolean;};const UserGreeting: FC = () => <h1>Welcome back!</h1>;const GuestGreeting: FC = () => <h1>Please sign up.</h1>;const Greeting: FC<GreetingProps> = (props) => {return props.isLoggedIn ? <UserGreeting /> : <GuestGreeting />;};createRoot(document.getElementById('root')!).render(// Try changing to isLoggedIn={false}:<Greeting isLoggedIn={true} />);
# react/exercise にて$ TARGET=C05/Sample1 npm run dev
もちろん、条件付きレンダーを変数に格納することもできます。
const UserGreeting: FC = () => <h1>Welcome back!</h1>const GuestGreeting: FC = () => <h1>Please sign up.</h1>const Greeting: FC<GreetingProps> = props => {+ const greeting = props.isLoggedIn ? <UserGreeting /> : <GuestGreeting />+ return greeting- return props.isLoggedIn ? <UserGreeting /> : <GuestGreeting />}createRoot(document.getElementById("root")!).render(// Try changing to isLoggedIn={false}:<Greeting isLoggedIn={true} />);
下記のように、Greeting コンポーネントの構造が少し変わった場合でも、条件付きレンダーが利用できます。
// 条件付きレンダーを変数に入れるconst UserGreeting: FC = () => <h1>Welcome back!</h1>;const GuestGreeting: FC = () => <h1>Please sign up.</h1>;const Greeting: FC<GreetingProps> = (props) => {const greeting = props.isLoggedIn ? <UserGreeting /> : <GuestGreeting />;return <div className="container">{greeting}</div>;};createRoot(document.getElementById("root")!).render(// Try changing to isLoggedIn={false}:<Greeting isLoggedIn={true} />);
条件付きレンダーを中括弧でインライン記述もできます。
const UserGreeting: FC = () => <h1>Welcome back!</h1>;const GuestGreeting: FC = () => <h1>Please sign up.</h1>;const Greeting: FC<GreetingProps> = (props) => {return <div className="container">{props.isLoggedIn ? <UserGreeting /> : <GuestGreeting />}</div>;};createRoot(document.getElementById("root")!).render(// Try changing to isLoggedIn={false}:<Greeting isLoggedIn={true} />);
【課題 5-1】条件分岐をさせよう!
以下の要件を満たしてください。
- 画面上に文字列が表示されている
- valid な文字列を赤色、そうでない文字列を青色にする
- アルファベット 4 文字, 数字 3~4 文字と続く文字列を valid とする
- 関数 isValidValue が valid かどうか判定
- 引数の文字列が valid なら true, そうでなければ false を返す
- [ヒント] 文字列の入った四角形は
ListItem
コンポーネント
- valid な文字列を赤色、そうでない文字列を青色にする
# react/exercise にて$ TARGET=C05/Q1 npm run dev
編集対象ファイル: react/exercise/C05/Q1/index.tsx