reactとlaravelで出力する値を絞り込む機能を作成しています。
javascript
1 2const [data1, setData1] = useState(0) 3const [data2, setData2] = useState(0) 4const selectedDatas = Datas.filter(row => { 5 if(data1 == 0 && data2 == 0) { 6 return true 7 } 8 if(data1 != 0 && data2 == 0 { 9 return selectData1 == row.data1 10 } 11 if(data1 == 0 && data2 != 0 { 12 return selectData2 == row.data2 13 } 14 return selectData1 == row.data1 && selectData2 == row.data2 15} 16 17return ( 18 <> 19 <select onChange={e => setData1(e.target.value)}}> 20 <option value=0>0<option> 21 <option value=1>1<option> 22 <option value=2>2<option> 23 </select> 24 <select onChange={e => setData2(e.target.value)}}> 25 <option value=0>0<option> 26 <option value=1>1<option> 27 <option value=2>2<option> 28 </select> 29 </> 30)
filterメソッドを使って絞り込みを行っています。
stateはそれぞれvalueを持つように設定されていてselectboxのonChangeによってvalueが入る形になっています。
Datasにはオブジェクトが入ります。
これで絞り込みを実装しているのですが、条件が3個、4個と増えていくとその階乗分if文を書く必要があり、冗長な記述になってしまうため、良い方法がないか考えているところです。
javascript
1 2const [data1, setData1] = useState(0) 3const [data2, setData2] = useState(0) 4const [data3, setData3] = useState(0) 5const selectedDatas = Datas.filter(row => { 6 // 条件がもし増えたら階乗分だけifを書く必要がある。おそらく条件が3個の場合は9個ほど書く必要がある。 7 // if... 8 // if... 9 if(data1 == 0 && data2 == 0 /*&& data3 == 0 */) { 10 return true 11 } 12 if(data1 != 0 && data2 == 0 { 13 return selectData1 == row.data1 14 } 15 if(data1 == 0 && data2 != 0 { 16 return selectData2 == row.data2 17 } 18 return selectData1 == row.data1 && selectData2 == row.data2 19} 20 21return ( 22 <> 23 <select onChange={e => setData1(e.target.value)}}> 24 <option value=0>0<option> 25 <option value=1>1<option> 26 <option value=2>2<option> 27 </select> 28 <select onChange={e => setData2(e.target.value)}}> 29 <option value=0>0<option> 30 <option value=1>1<option> 31 <option value=2>2<option> 32 </select> 33 <select onChange={e => setData3(e.target.value)}}> 34 <option value=0>0<option> 35 <option value=1>1<option> 36 <option value=2>2<option> 37 </select> 38 </> 39)
こちら何か良い方法がありましたら考え方だけでも構いませんのでご教授いただけたらと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/31 02:36
2020/12/31 02:48
2021/01/04 03:06
2021/01/04 05:02
2021/01/04 07:24 編集
2021/01/04 10:28