質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

React.js

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

Q&A

1回答

460閲覧

Reduxのstate制約について

2_34_koki

総合スコア67

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

React.js

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

0グッド

0クリップ

投稿2020/06/08 02:26

Reduxの使用するに当たっって, stateを直接変更してはならないという物があるのですがstateの中身を一部変更したいときに下記のコードはstateの制約に反してしまうのかわかりません.

//予想されるstateの状態 state = [ { bookid: 1, name: 'Rails入門'} { bookid: 2, name: 'Go入門' } ..... ] // 今書いてる方 var newState = state newState[0] = { bookid: 1, name: 'React入門' } return newState; //予想されるダメな例 state[0] = { bookid: 1, name: 'React入門' } return state;

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

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

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

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

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

Kenji.Noguchi

2020/06/08 02:45

今書いているのも正しく動かないでしょう。要は現在のステートと変更されたステートの違いを検出してレンダリングが走るので、現在のステートをいじってしまうと違いが検出できなくなってしまいます。ですからstateの複製を作って、複製に対して変更を加えれば良いわけです。その為...スプレッドや_.clone、Object.assign()などが頻用されるわけです。
2_34_koki

2020/06/08 02:48

なるほど。そうすると,今回のような配列の場合はadd, removeしかできなくなります?
guest

回答1

0

配列そのものと、name を書き換えたい book オブジェクトを作り直す必要があります。

方法 1. index で指定する場合

js

1function updateBookByIndex(state, index, name) { 2 const newState = state.slice(); 3 newState[index] = { ...state[index], name }; 4 return newState; 5}

参考: JavaScriptで配列のコピー(値渡し) - Qiita
参考: オブジェクトのspread構文でのマージ - JavaScript Primer

方法 2. bookid で指定する場合

js

1function updateBookById(state, id, name) { 2 return state.map(book => book.bookid === id ? { ...book, name } : book); 3}

投稿2020/06/08 05:16

hoshi-takanori

総合スコア7895

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問