You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:21:30