やりたいこと
API経由で取得したJsonデータをテーブル形式で表示させたいです
画面上で表示させる項目や表示させる行数を指定できるようにしたいです
APIやルーティングはLaravelで作っています
ソース
js
1import React, { useState, useEffect } from 'react'; 2import ReactDOM from 'react-dom'; 3 4const Example = () => { 5 const [param, setParam] = useState([]); 6 const [lines, setLines] = useState(3); 7 const [tableData, setTableData] = useState([]); 8 const [loading, setLoading] = useState(false); 9 10 useEffect(() => { 11 const get = async () => { 12 // 実際はparamとlinesを渡してAPI経由でデータを取得しています 13 const sampleData = [ 14 { 'id': 1, 'name': 'taro', 'age': 16 }, 15 { 'id': 2, 'name': 'hanako', 'age': 15 }, 16 { 'id': 3, 'name': 'satoshi', 'age': 22 }, 17 { 'id': 4, 'name': 'kaori', 'age': 19 }, 18 ] 19 await setTableData(sampleData) 20 setLoading(true) 21 console.log('useEffect was called') 22 } 23 get() 24 }, [lines, param]) 25 26 const changeParam = (target) => { 27 const arr = param; 28 const index = arr.findIndex((v) => v == target); 29 if (index == -1) { 30 arr.push(target); 31 setParam(arr); 32 } else { 33 arr.splice(index, 1); 34 setParam(arr); 35 } 36 console.log('param >> ', param) 37 } 38 39 return ( 40 <div> 41 <p>表示行数</p> 42 <input type='number' value={lines} onChange={(e) => { setLines(e.target.value) }} /> 43 <input type='checkbox' onChange={() => { changeParam('id') }} />ID 44 <input type='checkbox' onChange={() => { changeParam('name') }} />Name 45 <input type='checkbox' onChange={() => { changeParam('age') }} />Age 46 {loading && <TableEample data={tableData} />} 47 </div> 48 ) 49} 50 51 52export default Example; 53
現象
初回ロード時とlines
の値が変わったときはconsoleに'useEffect was called'
と表示されます
チェックボックスをクリックしたときにparam
の値は変わっていますがuseEffectが呼ばれません
チェックボックスをクリックしたタイミングでデータを更新できるようにしたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/17 02:38