React Banner (バナー) の概要

    Ignite UI for React Banner コンポーネントは、スナックバーより長い時間の表示でダイアログより控えめのメッセージを簡単に表示できます。また、メッセージのコンテキストに基づいて実行するアクションを示すこともできます。

    Ignite UI for React Banner の例

    使用方法

    まず、次のコマンドを実行して、対応する Ignite UI for React npm パッケージをインストールする必要があります:

    npm install igniteui-react
    

    次に、以下のように、IgrBanner と必要な CSS をインポートする必要があります:

    import { IgrBanner } from 'igniteui-react';
    import 'igniteui-webcomponents/themes/light/bootstrap.css';
    

    Ignite UI for React の完全な概要については、作業の開始トピックを参照してください。

    Banner コンポーネントを表示するには、ボタン クリックで show メソッドを呼び出します。バナーは、要素がページ テンプレートに挿入された場所にその他すべてのコンテンツを移動して表示されます。通常、閉じるためのユーザー操作をほとんど必要としない非侵入型コンテンツを表示します。

    <IgrButton onClick={() => bannerRef.current.show()}>
        <span>Show Banner</span>
    </IgrButton>
    
    <IgrBanner ref={bannerRef}>
        <span>You are currently offline.</span>
    </IgrBanner>
    

    [!NOTE] IgrBanner には、バナーを閉じるデフォルトの OK アクション ボタンが含まれています。

    IgrBanner コンポーネントは、マテリアル デザイン バナー ガイドラインにできるかぎり準拠しながらコンテンツをテンプレート化します。

    バナー メッセージの変更

    IgrBanner タグに渡されるコンテンツを変更することによりバナーに表示されるメッセージを設定できます。指定したバナー領域にテキストが表示され、表示時にバナーはデフォルト テンプレートを使用します。以下は、サンプル バナーのコンテンツを変更してより多くの情報を提供します。

    <IgrBanner ref={bannerRef}>
        <span>You have lost connection to the internet. This app is offline.</span>
    </IgrBanner>
    

    アイコンの追加

    バナーの prefix スロットを使用して、IgrIcon をバナーに表示できます。Icon は常にバナー メッセージの最初に配置されます。

    [!NOTE] 複数の IgrIcon 要素が挿入される場合、バナーはそれらすべてを最初に配置しようとします。IgrIcon は 1 つのみ、直接渡すことに注意してください。

    IgrIcon をバナーに渡すには、prefix スロットを使用します。

    <IgrBanner ref={bannerRef}>
        <IgrIcon slot="prefix" name="signal_wifi_off"></IgrIcon>
        <span>You have lost connection to the internet. This app is offline.</span>
    </IgrBanner>
    

    バナー メッセージで IgrIcon を使用したい場合は、バナーのコンテンツに挿入するだけです。

    <IgrBanner ref={bannerRef}>
        <span>You have lost connection to the internet. This app is offline.</span>
        <IgrIcon name="signal_wifi_off"></IgrIcon>
    </IgrBanner>
    

    バナー ボタンの変更

    IgrBanner は、バナー ボタンをテンプレート化するための actions スロットを公開します。これにより、デフォルトのバナー ボタン (OK) をオーバーライドし、ユーザー定義のカスタム操作を追加します。

    <IgrBanner ref={bannerRef}>
        <IgrIcon slot="prefix" name="signal_wifi_off"></IgrIcon>
        <span>You have lost connection to the internet. This app is offline.</span>
        <div slot="actions">
            <IgrButton variant="flat" onClick={() => bannerRef.current.toggle()}>
                <IgrRipple />
                <span>Toggle Banner</span>
            </IgrButton>
        </div>
    </IgrBanner>
    

    イベントにバインド

    バナー コンポーネントは、閉じられるときに Closing イベントと Closed イベントを発行します。Closing イベントはキャンセル可能です。CustomEvent インターフェイスを使用し、発行されたオブジェクトの cancelable プロパティは true に設定されています。Closing イベントをキャンセルすると、対応する終了アクションとイベントはトリガーされません。バナーは閉じられず、Closed イベントも発行されません。

    終了イベントをキャンセルするには、preventDefault メソッドを呼び出します。

    <IgrBanner onClosing={(event) => event.preventDefault()}>
        ...
    </IgrBanner>
    

    [!NOTE] 上記が適用されると、終了イベントが常にキャンセルされるため、バナーが閉じることはありません。

    高度な例

    2 つのカスタムボタンのバナーを作成しましょう。1 つは通知を閉じるためのボタンで、もう 1 つは接続をオンにするためのボタンです。actions スロットを使用してカスタム アクション ハンドラーを渡すことができます。

    <IgrBanner ref={bannerRef}>
        <IgrIcon slot="prefix" name="signal_wifi_off"></IgrIcon>
        <span>You have lost connection to the internet. This app is offline.</span>
        <div slot="actions">
            <IgrButton variant="flat" onClick={() => bannerRef.current.hide()}>
                <IgrRipple />
                <span>Continue Offline</span>
            </IgrButton>
            <IgrButton variant="flat" onClick={refreshBanner}>
                <IgrRipple />
                <span>Turn On Wifi</span>
            </IgrButton>
        </div>
    </IgrBanner>
    

    Google のマテリアル デザイン ガイドラインでは、バナーはに表示するボタンは 2 つまでです。IgrBanner は、actions スロットの要素数を明示的に制限しませんが、マテリアル デザイン ガイドに従う場合は、最大 2 つの要素を使用することを強くお勧めします。

    閉じるオプション (Continue Offline) は詳細なロジックを必要としないため、hide のみの呼び出しが可能です。しかし、確認アクション (Turn On Wifi) は追加のロジックを必要とするため、コンポーネントで定義する必要があります。次に、click イベントのイベント リスナーを追加します。最後に、変更するたびに refreshBanner() メソッドを呼び出します。これにより、wifiState に基づいてバナーを切り替えます。

    ナビゲーション バーには Wi-Fi アイコンが表示され、その click イベントのイベント リスナーも追加されます。変更ごとに refreshBanner() メソッドが呼び出されるため、アイコンはバナーを切り替えるだけでなく、接続の状態に応じて変化します。

    const bannerRef = useRef<IgrBanner>(null);
    const iconRef = useRef<IgrIcon>(null);
    
    const [wifiState, setWifiState] = useState(false);
    const [iconName, setIconName] = useState("signal_wifi_off");
    
    const refreshBanner = () => {
        const nextWifiState = !wifiState;
        setWifiState(nextWifiState);
        setIconName(nextWifiState ? "signal_wifi_4_bar" : "signal_wifi_off");
    
        if (nextWifiState) {
            bannerRef.current.hide();
        } else {
            bannerRef.current.show();
        }
    }
    
    return(
        <>
            <IgrNavbar>
                <h1>Gallery</h1>
                <IgrIcon ref={iconRef} name={iconName} slot="end" onClick={refreshBanner}></IgrIcon>
            </IgrNavbar>
    
            <IgrBanner ref={bannerRef}>
                ...
                <div slot="actions">
                    ...
                    <IgrButton variant="flat" onClick={refreshBanner}>
                        <IgrRipple />
                        <span>Turn On Wifi</span>
                    </IgrButton>
                </div>
            </IgrBanner>
        </>
    );
    

    最後に、WiFi の状態に関するメッセージを表示する IgrToast を追加します。以下はテンプレート化したバナーのデモです。

    スタイル設定

    IgrBanner コンポーネントはいくつかの CSS パーツを公開し、スタイルを完全に制御できるようにします。

    名前 説明
    base バナー コンポーネントの基本ラッパー。
    spacer バナーの周囲にスペースを設定する内側のラッパー。
    message テキストとイラストを保持するパーツ。
    illustration バナーのアイコン/イラストを保持するパーツ。
    content バナーのテキスト コンテンツを保持するパーツ。
    actions バナーのアクション ボタンを保持するパーツ。
    igc-banner::part(spacer) {
      background: var(--ig-surface-600);
    }
    
    igc-banner::part(illustration) {
      color: var(--ig-surface-600-contrast);
    }
    
    igc-banner::part(content) {
      color: var(--ig-gray-900);
    }
    

    API リファレンス

    その他のリソース