今、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
回答1件
あなたの回答
tips
プレビュー