★前回の記事
前回の記事で、Firebaseへの通信を行う前にADD_TODO_REQUEST、通信完了時にADD_TODO_SUCCESS、エラー発生時にADD_TODO_ERROR actionをそれぞれdispatchしました。今回はそれぞれに対するreducerと画面表示を実装します。 それぞれのactionに対して、メッセージを画面に表示するようにします。
reducerの実装
始めに、reducerのtodos
を変更します。
src/reducers/todos.js
const todos = (state = {}, action) => { // #1 switch (action.type) { case 'ADD_TODO_REQUEST': return {...state, notice: 'データを送信中'} // #2 case 'ADD_TODO_SUCCESS': return {...state, notice: '送信完了しました'} // #2 case 'ADD_TODO_ERROR' : return {...state, notice: 'エラーが発生しました'} // #2 // case 'ADD_TODO': は削除 // #3 // case 'TOGGLE_TODO': は次回変更 default: return state } } // 後略
- 初期値を、空の配列から空のオブジェクトに変更します(#1)。
notice
に表示したい文言をそれぞれセットします(#2)。case ‘ADD_TODO’
はもう使用しないので削除します(#3)。
表示用コンポーネントの追加
次に、notice
を画面に表示します。
表示用のコンポーネントをApp
の直下に追加します。
src/components/App.js
// 前略 import NoticeForTodo from './NoticeForTodo' // 追加 const App = () => ( <div> <AddTodo /> <NoticeForTodo /> // 追加 <VisibleTodoList /> <Footer /> </div> ) // 後略
表示用コンポーネントを実装します。
src/components/NoticeForTodo.js
(新規ファイル)
import React from 'react' import { connect } from 'react-redux' import PropTypes from 'prop-types' let NoticeForTodo = ({ notice }) => { if (! notice) { return null; } return ( <div> {notice} </div> ) } NoticeForTodo.propTypes = { notice: PropTypes.string } const mapStateToProps = state => { return { notice: state.todos.notice } } NoticeForTodo = connect( mapStateToProps )(NoticeForTodo) export default NoticeForTodo;
動作確認
ブラウザで確認しましょう。タスクを送信すると、送信完了しました
の文言が表示されます。
通信を切断してから送信ボタンを押すと、データの送信中
の文言も確認できました。再び通信を接続すると、送信完了しました
の文言が表示されます。
以上でFirebaseへの送信前後でメッセージを表示することができました。
★次回の記事
★目次