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

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

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

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

React.js

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

Q&A

解決済

1回答

1095閲覧

【ReactとRedux利用】ドロップダウンリストを作成し、その値を各項目に関連づけたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

Redux

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

React.js

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

0グッド

0クリップ

投稿2020/08/07 06:30

編集2020/08/07 08:24

今、ReactとReduxを用いて、簡単なメモアプリの作成をしております。
追加したメモ1つずつに、分類タグのようなものを設置したく、それぞれのメモの横にドロップダウンリストを作成し、選択したら、その値が設定されるという仕組みを実装したいと考えております。
しかし、どうしてもその方法が見つかりません。インターネットで検索してみたりYouTubeのコーディング動画等も見てみたのですが、自分が実行しようと思っていることとは違うものであったため、困っています。
Redux Persistも利用しています。
もし方法をご存知の方がいらっしゃいましたら、ヒントだけでもご教授頂けますと幸いです。

以下、レデューサとストアを作成したファイルです。追加・削除・検索機能は実装済みです。

JavaScript

1// 初期値(ステートの値)の設定 2const initData = { 3 data: [], // 空の配列。初期画面。 4 mode: 'default', 5 fdata: [] 6}; 7 8// レデューサーの作成 9export function memoReducer(state = initData, action) { 10 switch (action.type) { 11 case 'ADD': 12 return addReduce(state, action); 13 case 'DELETE': 14 return deleteReduce(state, action); 15 case 'FIND': 16 return findReduce(state, action); 17 default: 18 return state; 19 } 20} 21 22// 追加・削除・検索のレデュース処理(上記のcaseのreturn) 23 24// メモ追加のレデュース処理 25function addReduce(state, action) { 26 let d = new Date(); 27 let f = d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds(); 28 let data = { 29 message: action.message, 30 created: f 31 }; 32 33 let newData = state.data.slice(); // 配列のコピー 34 newData.unshift(data); // dataという連想配列をnewDataという連想配列の先頭に追加。 35 return { 36 data: newData, // dataが先頭に追加された後のnewData。 37 message: 'Added!', 38 mode: 'default', 39 fdata: [] 40 }; 41} 42 43// メモ削除のレデュース処理 44function deleteReduce(state, action) { 45 let newData = state.data.slice(); 46 newData.splice(action.index, 1); // // spliceは要素の削除・置き換え。 47 return { 48 data: newData, 49 message: 'Deleted!', 50 mode: 'delete', 51 fdata: [] 52 }; 53} 54 55// メモ検索のレデュース処理 56function findReduce(state, action) { 57 let f = action.find; 58 let fdata = []; 59 state.data.forEach((value) => { 60 if (value.message.indexOf(f) >= 0) { 61 fdata.push(value); // indexOfは、引数と同じ内容の要素の最初のインデックスを返す。 62 } 63 }); 64 return { 65 data: state.data, 66 message: 'Find', 67 mode: 'find', 68 fdata: fdata 69 }; 70} 71 72// アクションクリエーター作成。dispatchで引数として渡すアクションを作成。 73// そのままdispatchなどで送信され、レデューサーによってそれぞれの処理を実行する。 74 75// メモ追加のアクション 76export function addMemo(text) { 77 return { 78 type: 'ADD', 79 message: text 80 } 81} 82 83// メモ削除のアクション。削除するメモのインデックス番号を渡して呼び出す。indexのnumは引数の番号。 84export function deleteMemo(num) { 85 return { 86 type: 'DELETE', 87 index: num 88 } 89} 90 91// メモ検索のアクション。検索テキストを渡して呼び出す。 92export function findMemo(text) { 93 return { 94 type: 'FIND', 95 find: text 96 } 97} 98 99// ストアを作成 100export default createStore(memoReducer);

利用環境

MacBook Pro
エディタ:VSCode
ブラウザ:Google Chrome

稚拙な質問になってしまい、申し訳ございません。
ご回答お待ちしております。

補足

想定している挙動と致しましては、
1.ユーザーがメモとして残したい内容を入力欄に入力する。
2.ユーザーがADDボタンを押すと、検索・削除のフォームの下にある空白の部分に、
入力された内容(メモ)が表示される。
3.メモが表示されると、同時にそのメモの横にドロップダウンリストが表示される。
4.ドロップダウンリストの内訳は、Work・Vacation・Moneyの3種類となっており、
それらのうち、ユーザーが選択したリストが表示された状態になる。
お金関係であれば、Money、仕事関連であれば、Workということです。

例)ユーザーが、「500円割り勘払う」と入力。ドロップダウンリストではMoneyを選択。
この場合、以下のように表示される想定です。(「|」は境目として念のため記載しています。)
「500円割り勘払う」 |追加時刻|ドロップダウンリストでMoneyを選択したので、Moneyを表示

凄く簡潔に言ってしまいますと、メモの内容と、MoneyやWorkといったその内容のジャンル(関連すること)を表示することを考えています。

以下、CodeSandboxで再現致しました、現状です。追加・削除・検索機能はすでに実装完了しております。
https://codesandbox.io/s/admiring-golick-nm6vx?file=/reduxmemoapp/src/Store.js

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

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

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

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

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

anozon

2020/08/07 06:35

https://codesandbox.io などで最小限の再現できますか? 想定してる挙動と実際の説明を増やしてほしいです。
退会済みユーザー

退会済みユーザー

2020/08/07 08:25

ご依頼ありがとうございます。 補足に追加致しました。ご確認お願い致します。 不備等あれば、またおっしゃってください!
guest

回答1

0

ベストアンサー

実現したい機能を正確に把握出来ていない部分もあるのですが、それぞれのメモにタグを持てるようにするのであれば、現状のデータ構造ですと短絡的ですが、ストアのstateのdataの配列の要素のオブジェクトにタグ用のプロパティを追加するのはどうでしょうか?

投稿2020/08/07 08:11

kmtr

総合スコア213

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

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

退会済みユーザー

退会済みユーザー

2020/08/12 03:48

回答してくださり、ありがとうございました。時間はかかりましたが、なんとか実装できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問