LoginSignup
3
3

More than 5 years have passed since last update.

webpacker + react-railsの環境で、react_componentを使うときだけ必要なアセットを読み込むようにする

Posted at

はじめに

webpacker+react-railsを使ってRailsプロジェクトにReactを導入しています。

  • javascript_pack_tagでアセットを読み込む
  • react_componentでReactコンポーネントを読み込む

ってのをマニュアルどおりやってましたが、、、webpackでcompileされるjsが結構大きい。(当然なんだけど)

そして、Reactは部分的に導入しただけで全ページで使ってるわけじゃないのでサイトスピードに影響しててつらい。

とはいえ、毎回アセットの読み込みとreact_componentの記述を併記するのつらい。

ってことで、Reactコンポーネントを使用しているページにだけアセットを読み込むようにヘルパーを作りました。

やったこと

まずはlayoutファイルを修正。

app/views/layouts/application.slim
  head
    = javascript_include_tag 'application'
-   = javascript_pack_tag 'application'
+   = yield :webpacker_assets

react_componentをラップしたヘルパーを追加。

app/helpers/application_helper.rb
def render_react_component(*args, &block)
  content_for :webpacker_assets do
    assets = []
    assets << javascript_pack_tag('application')
    assets << stylesheet_pack_tag('application')
    assets.join("\n").html_safe
  end
  react_component(*args, &block)
end

今までreact_componentを使ってた部分を置き換える。

- = react_component('Hoge', props)
+ = render_react_component('Hoge', props)

yield, content_for便利ですね〜 :smile:

以上です。

参考

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3