Rails + React 应用程序页面需要重新加载才能呈现 React

Rails + React App Pages Require Reload To Render React

我使用 rails new exampleapp --webpack=react 创建了一个新的 Rails + React 应用程序。在我的主页上,我在 html.erb 中有一个 header,并且一些反应 jsx 使用 <%= javascript_pack_tag 'reactfilename' %> 呈现。

当我点击 link 到我的主页时,例如 <li><%= link_to "Home", root_path %></li>,只有 header 被渲染。只有在我重新加载页面时才会显示我的反应组件。

我 运行 rails s./bin/webpack-dev-server 开始我的申请。我的 Heroku Web 服务器上也出现了同样的问题。其中我有以下设置:

过程文件: web: bin/rails server -p $PORT -b 0.0.0.0

Procfile.dev: web: ./bin/rails server webpacker: ./bin/webpack-dev-server

这是 React + Rails 应用程序的预期行为,还是我的配置有问题?

确保在 turbolink:load 事件后加载组件

document.addEventListener('turbolinks:load', () => {
  let container = document.getElementById('react-order')
  if (!container) return

  ReactDOM.render(
    <OrderForm />,
  container)
})

我认为这个问题与 turbolinks 后台优化有关。一种解决方法是通过将 turbolinks 设置为 false 来完全刷新页面:

<%= link_to "Home", root_path, data: { turbolinks: false } %>

使用更新版本的 turbolinks:

<%= link_to "Home", root_path, data: { turbo: false } %>