[React Bootstrap] Placeholder を表示してみる | 心を無にして始める React

今回は、Placeholder コンポーネントを表示します。

準備

まだ components フォルダがなければ作ります。

src を右クリックして New Folder

components と入力してフォルダを作ります。

今回は、components フォルダに Placeholder のコンポーネントを作って、表示してみます。

公式のドキュメントはここ。

https://react-bootstrap.github.io/components/placeholder/

Placeholder コンポーネントをつくる

component フォルダに Placeholder.js を作ります。

Placeholder.js を心を無にして編集してみます。

import React from 'react';
import { Placeholder as BootstrapPlaceholder } from 'react-bootstrap';
import PlaceholderButton from './PlaceholderButton';

function Placeholder(props) {
  const {
    children,
    ...otherProps
  } = props;

  return (
    <BootstrapPlaceholder {...otherProps}>
      {children}
    </BootstrapPlaceholder>
  );
}

export default Object.assign(Placeholder, {
  Button: PlaceholderButton,
});

NavItem.js も続けて作ります。

import React from 'react';
import { Placeholder as BootstrapPlaceholder } from 'react-bootstrap';

function PlaceholderButton(props) {
  const {
    children,
    ...otherProps
  } = props;

  return (
    <BootstrapPlaceholder.Button {...otherProps}>
      {children}
    </BootstrapPlaceholder.Button>
  );
}

export default PlaceholderButton;

プロジェクトでは、コンポーネントを統一したデザインで利用することが多いです。

そのため、(React Bootstrap のコンポーネントをその場その場でカスタマイズしながら使うよりも、)プロジェクトでコンポーネントにしたものを使うほうが、変更をお手軽に漏れなくできることが多いです。

Placeholder コンポーネントを表示する

それでは、 App.js を編集して Placeholder コンポーネントを表示します。

import React from 'react';
import './App.css';
import Placeholder from './components/Placeholder';

function App() {
  return (
    <>
      <div className="p-5 bg-white">
        <div className="mb-3 p-3" style={{ border: 'dotted 2px #7777ff' }}>
          <Placeholder xs={6} />
          <Placeholder className="w-75" />
          <Placeholder style={{ width: '60%' }} />
        </div>
        <div className="mb-3 p-3" style={{ border: 'dotted 2px #7777ff' }}>
          <div className="d-flex gap-3">
            <Placeholder.Button className="w-100" aria-hidden="true" />
            <Placeholder.Button className="w-100" variant="secondary" aria-hidden="true" />
            <Placeholder.Button className="w-100" variant="success" aria-hidden="true" />
            <Placeholder.Button className="w-100" variant="danger" aria-hidden="true" />
            <Placeholder.Button className="w-100" variant="warning" aria-hidden="true" />
            <Placeholder.Button className="w-100" variant="info" aria-hidden="true" />
            <Placeholder.Button className="w-100" variant="light" aria-hidden="true" />
            <Placeholder.Button className="w-100" variant="dark" aria-hidden="true" />
          </div>
        </div>
        <div className="mb-3 p-3" style={{ border: 'dotted 2px #7777ff' }}>
          <Placeholder animation="wave">
            <Placeholder xs={12} />
          </Placeholder>
          <Placeholder animation="glow">
            <Placeholder xs={12} />
          </Placeholder>
        </div>
        <div className="mb-3 p-3" style={{ border: 'dotted 2px #7777ff' }}>
          <Placeholder xs={3} bg="primary" />
          <Placeholder xs={3} bg="secondary" />
          <Placeholder xs={3} bg="success" />
          <Placeholder xs={3} bg="danger" />
          <Placeholder xs={3} bg="warning" />
          <Placeholder xs={3} bg="info" />
          <Placeholder xs={3} bg="light" />
          <Placeholder xs={3} bg="dark" />
        </div>
        <div className="mb-3 p-3" style={{ border: 'dotted 2px #7777ff' }}>
          <Placeholder xs={12} size="lg" />
          <Placeholder xs={12} />
          <Placeholder xs={12} size="sm" />
          <Placeholder xs={12} size="xs" />
        </div>
      </div>
    </>
  );
}

export default App;

画面を確認してみます。

はい、できました。