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

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

準備
まだ components フォルダがなければ作ります。
src
を右クリックして New Folder
。

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

今回は、components フォルダに Spinner のコンポーネントを作って、表示してみます。
公式のドキュメントはここ。
https://react-bootstrap.github.io/components/spinners/
Spinner コンポーネントをつくる
component フォルダに Spinner.js
を作ります。
Spinner.js
を心を無にして編集してみます。
import React from 'react';
import { Spinner as BootstrapSpinner } from 'react-bootstrap';
function Spinner({
animation = "border",
...otherProps
}) {
return (
<BootstrapSpinner animation={animation} {...otherProps} />
)
}
export default Spinner;
プロジェクトでは、コンポーネントを統一したデザインで利用することが多いです。
そのため、(React Bootstrap のコンポーネントをその場その場でカスタマイズしながら使うよりも、)プロジェクトでコンポーネントにしたものを使うほうが、変更をお手軽に漏れなくできることが多いです。
Spinner コンポーネントを表示する
それでは、 App.js
を編集して Spinner コンポーネントを表示します。
import React, { useState, useEffect } from 'react';
import './App.css';
import Spinner from './components/Spinner';
function App() {
const [isLoading, setLoading] = useState(true);
useEffect(() => {
const requestData = (cb) => {
setTimeout(cb, 5000)
}
requestData(() => setLoading(false))
}, [])
return (
<div className="p-5">
{
isLoading
? (
<Spinner variant="primary" style={{ width: 64, height: 64 }} />
)
: (
<div className="py-4">
「データの読み込みおわりました」 ('◇')ゞ
</div>
)
}
<div className="py-2">
<Spinner variant="primary" size="sm" />
<Spinner variant="secondary" />
<Spinner variant="success" style={{ width: 64, height: 64 }} />
<Spinner variant="warning" style={{ width: 128, height: 128 }} />
</div>
<div className="py-2">
<Spinner animation="grow" variant="primary" size="sm" />
<Spinner animation="grow" variant="secondary" />
<Spinner animation="grow" variant="success" style={{ width: 64, height: 64 }} />
<Spinner animation="grow" variant="warning" style={{ width: 128, height: 128 }} />
</div>
</div>
);
}
export default App;
画面を確認してみます。

はい、できました。