🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

7783閲覧

Reactでページが更新されてもstateを保持したまま表示したい

CHAN_

総合スコア3

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2020/12/02 15:58

編集2020/12/07 07:18

#Todoリストを作成しています。
Reactで完了したタスクをチェックするチェックボックスを実装したいです。

チェックボックスのtrueとfalseの状態の更新はstateで出来る様になったのですが、ページを更新したり、ページ遷移したりするとチェックした筈の項目がチェックされていない状態に戻ってしまいます。

stateの初期状態が表示されてしまっているのは理解しているのですが、どうしたら更新されたstateの状態を保持したまま画面遷移したりページを更新したり出来るのでしょうか。

ご教示頂けますと幸いです。
宜しくお願い致します。

該当のソースコード

react

1import React from "react"; 2import axios from "axios"; 3 4class Todo extends React.Component { 5 constructor(props) { 6 super(props); 7 8 this.state = { 9 posts: [], 10 check1: false, 11 check2: false, 12 check3: false, 13 }; 14 } 15 16 componentDidMount() { 17 axios.get("http://hoge").then((res) => { 18 this.setState({ posts: res.data }); 19 }); 20 } 21 22 handleChange = (e) => { 23 let name = e.target.name 24 if (name === e.target.name) { 25 this.setState({[e.target.name]: !this.state.[e.target.name]}) 26 }} 27 28 render() { 29 return ( 30 <div> 31 {this.state.posts.map((post, index) => { 32 return ( 33 <div key={index}> 34 <label onLoad={() => this.componentDidMount()}> 35 {post.created_at} 36 </label><br/> 37 <label onLoad={() => this.componentDidMount()}> 38 <input type='checkbox' name='check1' checked={this.state.check1} onChange={this.handleChange} /> 39 {post.list_one} 40 </label><br /> 41 <label onLoad={() => this.componentDidMount()}> 42 <input type='checkbox' name='check2' checked={this.state.check2} onChange={this.handleChange} /> 43 {post.list_two} 44 </label><br /> 45 <label onLoad={() => this.componentDidMount()}> 46 <input type='checkbox' name='check3' checked={this.state.check3} onChange={this.handleChange}/> 47 {post.list_three} 48 </label> 49 </div> 50 ); 51 })} 52 </div> 53 ); 54 } 55} 56 57export default Todo; 58

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

お手軽に試したいのならデータの保存先として localStorage を使ってみるのが良いのではないでしょうか。
リロードしてもデータを保持するためには「localStorage」 - Qiita

もうちょっと本格的に Web サーバーにデータ保存したい!けれどサーバーを書くのは面倒くさい……というのであれば
jsonbox.io | A Free HTTP based JSON storage
というフリーで 30 日間だけ使える JSON 形式のデータベースサーバーなんかもあります。
(日本語解説記事:無料JSONストレージjsonboxを試してみた! | Developers.IO

データの永続化にはサーバーの知識が必要になってくると思いますので、後者で感覚を掴んでみるのがよいかもしれませんね。

投稿2020/12/11 15:27

A_kirisaki

総合スコア2853

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHAN_

2020/12/13 13:44

やはりデータをどこかに一旦保存して、保存されたものを表示する様にするんですね。 ご丁寧に参考サイトまで教えて頂きありがとうございます! 自分でも調べてみたところReduxを使っても出来る様なので、そちらも試してみたいと思います。 ご教示くださりありがとうございました。
A_kirisaki

2020/12/13 13:51

Redux ではページ更新してしまうとデータ消えてしまいますよ!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問