実現したいこと
axiosから取得したJSONオブジェクト(バックエンドで.jsonファイルをjson.load(file)したもの)をReactで扱い、内容をレンダリングできるようにしたい。
前提
React+TypeScriptで開発を行っています。
react-spreadsheet-gridというライブラリでExcelライクな表画面を作成しています。
axiosで動的に取得したJSONオブジェクトから、列情報(column)、行情報(row)を取得しフロントエンドでレンダリングをしたいです。
列名(Colum)は、オブジェクトで定義します。基本的にその列オブジェクトをライブラリのコンポーネントの"column"プロパティに渡すと、列名がレンダリングされます。
以下の場合で①だと問題なくレンダリングされますが、
②の場合だとレンダリングがされません(何も表示されない)
① 行オブジェクトの定義をハードコーディングした場合
② axiosでJSONオブジェクトを取得(response.data)して行情報の内容をマッピングして新しく作成したオブジェクトをコンポーネントのプロパティに渡した場合
該当のソースコード
以下の違いが判りません。はじめから定義したオブジェクトはレンダリングに反映されますが、配列に追加(push)したオブジェクトはレンダリングに反映されません。
レンダリング方法は一旦置いておいて、レンダリングに反映されないのはこの違いのせいだと考えていますが、調べても試行してもわからないためご存じでしたらご教示いただけますと幸いです。
なぜレンダリング方法はいったん置いておくかというと、どちらもconsole.logで直に確認すると[Onject Object]で、同じpopertyに対し一方はレンダリングされ、一方はされないので、Inputのオブジェクトの扱い方が悪いと考えました。
①はじめから定義(初期化)したオブジェクト(column)→レンダリングされる[Object Object]
TypeScript
1const column:any[] = [{id:"1",title:"hoge"}]; 2… 3<DataSheetGrid 4 value={data} 5 onChange={setData} 6 columns={column} ← 7 />
②pushで1つずつ追加したオブジェクト(column)→レンダリングされない[Object Object]
TypeScript
1const column:any[] = []; 2 3const response = await axios.get(endpoint) 4Object.keys(response.data[0]).map((key,index)=>{ 5 column.push({id:index, title: key }) 6}) 7 8… 9<DataSheetGrid 10 value={data} 11 onChange={setData} 12 columns={column} ← 13 />
試したこと
・JSON.stringify(res.data)
・setData(JSON.parse(JSON.stringify(res.data));
補足情報(FW/ツールのバージョンなど)
React
TypeScript
react-spreadsheet-grid
何卒よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー