10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

react-notification-systemで通知機能をつける

Last updated at Posted at 2019-05-16

話の流れ

  • 前書き
  • 導入
  • 使い方
  • 後書き

前書き

今回React.jsでTodoを作るにあたって、通知機能をつけたいと思い、使ってみました。
シンプルにでき、そのままでも綺麗に実装されますが、通知の中もコーディングで独自のスタイルを当てられるのが、自由度があっていいと思います。

公式ではデモが見れるのでぜひ参考にしてみてください。
公式:http://igorprado.com/react-notification-system/
GitHub: https://github.com/igorprado/react-notification-system

導入

npmまたはyarnでインストールします。

npm install react-notification-system
yarn add react-notification-system

そして、サンプルコードは以下になります。
想定は、ボタンを押すと、通知が現れるというものです。(GitHubのUsingと一緒ですが...)

index.js
import React, { Component } from 'react';
import NotificationSystem from 'react-notification-system';

class App extends Component{
    constructor(props){
        super(props);
        this.notificationSystem = React.createRef();
        this.addNotification = this.addNotification.bind(this);
  }
  addNotification() {
        const notification = this.notificationSystem.current;
        notification.addNotification({
            title: "Notification",
            message: "Hi, I'm information!",
            level: "info"
        })
    }
    render() {
        return (
          <>
            <button onClick={this.addNotification}>通知する</button>
            <NotificationSystem ref={this.notificationSystem} />
          </>
    )
  }
}

これでボタンをクリックすると画像のような通知が出てきます。
スクリーンショット 2019-05-16 23.35.54.png

このtitleとmessageの部分をhtmlで以下のように記述することができます。
(必要な箇所だけ抜粋しています。また、スタイルにはstyled-componentsを利用しています。styled-componentsの仕様につきましては、他の記事を参照ください。)

index.js
const Notification = styled.div`
    text-align: center;
    button{
        background: rgba(54, 156, 199, .1);
        padding: 4px 1rem;
        width: 80%;
        border: solid 2px rgb(54, 156, 199);
        border-radius: 6px;
        color: rgb(54, 156, 199);
        cursor: pointer;
        text-align: center;
        font-weight: bold;
        &:hover {
            background: rgba(54, 156, 199, .4);
        }
    }
`;
addNotification() {
        const notification = this.notificationSystem.current;
        notification.addNotification({
            level: 'info',
            autoDismiss: 10,
            children: (
                <Notification>
                    <h2>削除してもよろしいですか</h2>
                    <button onClick={console.log("Compolete")}>Delete</button>
                </Notification>
            )
        });
    }

これにより、以下のようなデザインになります。
スクリーンショット 2019-05-17 0.00.46.png

ボタンもデフォルトのスタイルでよければ、childrenプロパティを用いずにactionプロパティを使えば同様に実装が可能なのですが、上の画像のように、ボタンだけでなく、自分のスタイルを使いたい!という場合は、こちらで実装してみてください。
あと、今回はやっていないですが、Font Awesomeを使ってもおしゃれになりますね!!

後書き

ページに通知機能がつくと、なんか気持ちいいですね笑
思っていたよりも簡単に実装ができたので、ご参考までに。
ありがとうございました。

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?