Rails+React项目加载测试组件失败,报rails-ujs重复加载错误
解决"rails-ujs has already been loaded"错误并正确加载React组件
你遇到的核心问题是重复加载了rails-ujs,这直接触发了报错,同时也可能干扰React组件的初始化流程。咱们一步步来定位和解决:
1. 移除重复的JavaScript打包标签
你看,application.html.erb的<head>区域已经通过<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>加载了整个应用的JS包,而在app/views/static/index.html.erb里又重复写了<%= javascript_pack_tag 'application' %>——这就导致包括rails-ujs在内的所有JS代码被加载了两次,直接抛出了重复加载的错误。
修改方案:删除app/views/static/index.html.erb里的重复标签,修改后的文件内容应为:
<%= react_component("HelloWorld", { greeting: "Hello" }) %>
2. 确认React组件的打包配置正确
确保你的HelloWorld组件已经正确注册到Webpacker的打包流程中,检查app/javascript/packs/application.js是否包含以下关键配置:
// app/javascript/packs/application.js import Rails from "@rails/ujs" import Turbolinks from "turbolinks" import * as ActiveStorage from "@rails/activestorage" import "channels" // 导入React核心库与你的组件 import React from 'react' import { registerComponent } from 'react-rails' import HelloWorld from '../components/HelloWorld' // 组件路径根据实际情况调整 // 注册React组件供rails视图调用 registerComponent('HelloWorld', () => HelloWorld) Rails.start() Turbolinks.start() ActiveStorage.start()
3. 清理缓存并重启服务
完成上述修改后,务必要清理缓存并重启服务,避免旧的打包文件干扰:
# 清理Webpacker打包缓存 rails webpacker:clean # 清理Rails临时缓存 rails tmp:clear # 重启Rails服务器 rails s
做完这些步骤后,rails-ujs重复加载的错误应该会消失,你的HelloWorld组件也能正常渲染了。
内容的提问来源于stack exchange,提问作者user12091592
相关产品推荐
相关产品推荐

