0
0

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 3 years have passed since last update.

【React】Railsでsaveされた時に、Reactでサクセスメッセージを表示

Posted at

個人のブログで、ReactとRailsでDBとやりとりする記事を作りました

フロントReact、バックRailsでデータベースに保存する

某プログラミングスクール(◯MM)で課題で出されたものをReactで作ってみて、そこにサクセスメッセージを出そう、と言うのが今回の目的です。

メモ書き程度で書いていきます。

完成後の動作

フォーム内容の保存に成功するとサクセスメッセージが呼び出されます。
流れとしては、

  • stateを作る
  • createが呼ばれsaveされたらstateを変更する
  • stateをコンポーネントに渡してメッセージを表示させる

こんな感じです。

stateを作る

  state = {
    books: [],
    successCreate: false
  }

successCreateと言うstateを作りました。
ここは初期値はfalseとして、createが呼ばれたらtrueとします。

createが呼ばれsaveされたらstateを変更する

  createBook = (title, body) => {
    axios
      .post('http://localhost:3001/books', { title: title, body: body})
      .then((response) => {
        const newData = update(this.state.books, { $push: [response.data]})
        this.setState({books: newData, successCreate: true})
      })
  }

Rails側でbooksコントローラーのcreateを呼び出し、保存されたデータはbooksに追加し、successCreateはtureに変更します。
ちなみにbooksにはBookモデルのデータが全て入っています。

stateをコンポーネントに渡してメッセージを表示させる

このsuccessCreateの値をコンポーネントに渡します。

<BookCreateForm
  createBook={this.createBook}
  successCreate={this.state.successCreate}
/>

受け取った先で、stateがtrueの時にメッセージを表示するよう記述します。

{this.props.successCreate && (
  <p style={{color: '#16de69', fontSize: 6}}>Book was successfully created.</p>
)}

これでBookがcreateされ、stateが変更した時にメッセージが出るようになりました。

react側とrails側でバリデーションをかけてより安全性を高めれば、思いがけないメッセージの表示はなくなるかと。

忘備録的なものなのでとりあえず動いた時点で記事にしております、あしからずです。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?