[React Bootstrap] Toasts を表示してみる | 心を無にして始める React
今回は、Toast コンポーネントを表示します。
準備
まだ components フォルダがなければ作ります。
src
を右クリックして New Folder
。
components と入力してフォルダを作ります。
今回は、components フォルダに Toast のコンポーネントを作って、表示してみます。
公式のドキュメントはここ。
https://react-bootstrap.github.io/components/toasts/
Toast コンポーネントをつくる
component フォルダに Toast.js
を作ります。
Toast.js
を心を無にして編集してみます。
import React from 'react';
import { Toast as BootstrapToast } from 'react-bootstrap';
const Toast = React.forwardRef(({
img = (
<img src="https://placehold.jp/ffcccc/ffffff/20x20.png?text=%20" alt="" />
),
title,
time,
children,
...otherProps
}, ref) => {
return (
<BootstrapToast {...otherProps} ref={ref}>
{
title && (
<BootstrapToast.Header as="h3" closeButton={false}>
{
img && (
<span className="rounded me-2">
{img}
</span>
)
}
<strong className="me-auto">{title}</strong>
<small className="text-muted">{time}</small>
</BootstrapToast.Header>
)
}
<BootstrapToast.Body>
{children}
</BootstrapToast.Body>
</BootstrapToast>
)
});
export default Toast;
ToastContainer.js
も続けて作ります。
import React from 'react';
import { ToastContainer as BootstrapToastContainer } from 'react-bootstrap';
const ToastContainer = React.forwardRef((props, ref) => {
const {
children,
...otherProps
} = props;
return (
<BootstrapToastContainer {...otherProps} ref={ref}>
{children}
</BootstrapToastContainer>
)
});
export default ToastContainer;
プロジェクトでは、コンポーネントを統一したデザインで利用することが多いです。
そのため、(React Bootstrap のコンポーネントをその場その場でカスタマイズしながら使うよりも、)プロジェクトでコンポーネントにしたものを使うほうが、変更をお手軽に漏れなくできることが多いです。
Toast コンポーネントを表示する
それでは、 App.js
を編集して Toast コンポーネントを表示します。
import React from 'react';
import './App.css';
import Toast from './components/Toast';
import ToastContainer from './components/ToastContainer';
function App() {
return (
<>
<div
style={{
backgroundImage: "linear-gradient(150deg, rgba(243, 170, 196, 1), rgba(246, 190, 232, 1) 33%, rgba(255, 247, 216, 1) 76%, rgba(183, 187, 255, 1))",
minHeight: '100vh',
}}
>
<ToastContainer className="p-5" position="bottom-end">
<Toast title="First Toast" time="2 minutes ago">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</Toast>
<Toast title="Second Toast" time="just now">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</Toast>
</ToastContainer>
</div>
</>
);
}
export default App;
画面を確認してみます。
はい、できました。