React Native, Expoでチャート表示を試行錯誤


React Native(Expo Managed)でグラフを表示したかった時に色々やったメモ書き。

大半はWebViewで苦戦する内容です。

React Native 0.60 Expo v34

ライブラリを使う

ライブラリは適当に探すだけでも結構見つかります。

ただExpo Managedでやろうと思うと意外とできない。

 

react-native-chart-kitはlinkコマンドなしでもいけそう。

Quick Exampleを書いてみるとちゃんと表示されました。

Canvasを使う

<canvas/>が使えればこれまでに使ったJSライブラリが使えるのではと思いつく。

react-native-canvasというのがあったので使ってみます。

 

ドキュメントではlinkが必要そうですがしなくてもサンプルが動きました。

 

contextをとってきてチャート描画にChart.jsを使ってみます。

TypeError: TypeError: undefined is not an object (evaluating ‘canvas.style.width = newWidth + ‘px”)

canvas.styleが見つからない?

ログを出してみると確かにundefinedになる。

…。

ソースを見て色々試してみてダメだったのでいっそ<WebView/>を使ってみます。

WebViewを使う

<WebView/>はreact-nativeのコンポーネントにもありますが、そのうちなくすのでreact-native-community/react-native-webviewを使ってほしいとのこと。

react-native-canvasを使う時に追加したやつですね。

ReferenceError: _chart is not defined

injectedの中身を見てみるとこうなってた。こういう仕組みなのか。

本体部分が渡されないと動くはずもないのでCDNで読み込むことにする。

 

また同じエラーが出る。

そういえば実行ブロックが違うのかwindowから参照する。

ようやく動かすことが出来た。

(後々window部分を消しても動くようになったので直接原因ではないかも)

 

サンプルを動かしてみるとこんな感じになります。

フォントサイズとかいじらないと全く読めない。

 

WebViewでChart.jsを使うためのコンポーネントを適当に抜き出してみる。

 

使う側はtype, data, optionsを渡すだけ。

とりあえずこんな感じです。微調整すればいい感じになりそう。


コメントを残す

メールアドレスが公開されることはありません。