TIL 20211103[99便目]


CardAdd構成部品条件レンダリングの適用


「if(cardListCheck.length==0)」の条件で、カードが1枚もなければ+のボックスが表示され、カードが1枚あればCardPortfolioコンポーネントが表示されます.
const CardAdd = () => {
  const cardListCheck = useSelector((state) => state.cards.cardList);
  const cardList = useSelector((state) => state.cards);

  if (cardListCheck.length === 0) {
    return (
      <Grid>
        <Btn
          onClick={() => {
            history.push('/write');
          }}
        >
          프로젝트 추가하기
        </Btn>
        <Grid>
          +
        </Grid>
      </Grid>
    );
  }
  return (
    <Grid>
      <Btn
        onClick={() => {
          history.push('/write');
        }}
      >
        프로젝트 추가하기
      </Btn>
      {cardList.allIds.map((cardId) => {
        return (
          <Grid key={cardId}>
            <CardPortfolio cardId={cardId} />
          </Grid>
        );
      })}
    </Grid>
  );
};

export default CardAdd;
下の画像を見ると、画面の変化がよく、条件に合っています.

反応条件レンダリング

  • Reactの条件レンダリングはJavaScriptの動作と同じです.JavaScript演算子(ifや条件演算子など)を使用して現在の状態を表す要素を作成し、ReactでUIを更新してこれらの要素に一致させます.
  • 変数の宣言とif文の使用は、条件付きで構成部品をレンダリングする良い方法ですが、必要に応じて、より短い構文を使用することもできます.JSXに条件を埋め込む方法を紹介します.

    論理&&演算子を持つインライン条件


    式をJSXに挿入するには、カッコ
  • を使用します.JavaScriptロジック&演算子も含まれています.これにより、要素を条件付きで含めることがより便利になります.
  • function Mailbox(props) {
      const unreadMessages = props.unreadMessages;
      return (
        <div>
          <h1>Hello!</h1>
          {unreadMessages.length > 0 &&
            <h2>
              You have {unreadMessages.length} unread messages.
            </h2>
          }
        </div>
      );
    }
    
    const messages = ['React', 'Re: React', 'Re:Re: React'];
    ReactDOM.render(
      <Mailbox unreadMessages={messages} />,
      document.getElementById('root')
    );
  • javascriptではtrue&&式は常に式として計算され、false&&式は常にfalseとして計算されるため、このコードは有効です.
    したがって、条件がtrueの場合、次の要素が露出します.条件がfalseの場合、reactはスキップします.
  • 条件付き演算子の行内If-Else

  • 行を使用して要素を条件付きでレンダリングする別の方法は、JavaScriptの条件付き演算子condition?true:false.
  • // 예시1.
    render() {
      const isLoggedIn = this.state.isLoggedIn;
      return (
        <div>
          The user is <b>{isLoggedIn ? 'currently' : 'not'}</b> logged in.
        </div>
      );
    }
    より大きな表現にも使えますが、はっきり見えません.
    // 예시2.
    render() {
      const isLoggedIn = this.state.isLoggedIn;
      return (
        <div>
          {isLoggedIn ? (
            <LogoutButton onClick={this.handleLogoutClick} />
          ) : (
            <LoginButton onClick={this.handleLoginClick} />
          )}
        </div>
      );
    }

  • JavaScriptと同様に、お客様とチームが読みやすいと考えている内容に応じて適切なスタイルを選択できます.また、条件が複雑になりすぎる場合には、素子を抽出することを推奨します.

  • P.S.参考資料:https://reactjs-kr.firebaseapp.com/docs/conditional-rendering.html
  • Mypageでは、ページの不動の追加、修正、リストなどのコンポーネントを表示する必要があるので、コンポーネントをどのように区分するか、条件文をどのように処理するかについて多くの問題を考えました.😀
    if文で条件を与えた後、反応式ドキュメントで条件レンダリングを検索します.if文でレンダリングするのも良いですが、&&演算子または3つの演算子を使用すると、より短い構文を生成できます.実際のプロジェクトの再構築では、&&演算子または3つの演算子を使用してフレーズに変更する必要があります.