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

Rails 7中React组件无法在视图中渲染的问题

解决方案:修复ID大小写不匹配问题

问题的核心是DOM元素ID大小写敏感:你的视图文件views/home/index.html.erb里的节点是<div id="Welcome"></div>(首字母大写W),但React组件代码中使用的是document.getElementById('welcome')(全小写w),导致无法找到目标节点渲染组件。

修复步骤

  • 修改视图文件中的ID为全小写,保持和JS代码一致:
    <div id="welcome"></div>
    
  • 或者,修改React代码中的ID匹配视图的大写形式:
    document.addEventListener('DOMContentLoaded', () => {
        ReactDOM.render(<Welcome />, document.getElementById('Welcome'))
    })
    

验证其他配置(当前已正常)

确认以下配置无问题:

  • application.js已正确引入React入口文件./react/src/index.js
  • index.js已导入Welcome组件
  • 路由已正确设置根路径指向home#index

完整代码参考

Welcome组件代码(./react/src/components/Welcome.js)

import * as React from 'react'
import * as ReactDOM from 'react-dom'

const Welcome = () => {
    return(
        <div className="container">
            <h1>Hello World! Welcome to the Rails 7 Course with React JS</h1>
        </div>
    )
}

document.addEventListener('DOMContentLoaded', () => {
    // 这里的ID要和视图中的ID完全匹配(包括大小写)
    ReactDOM.render(<Welcome />, document.getElementById('welcome'))
})

export default Welcome

index.js代码(./react/src/index.js)

import Welcome from './components/Welcome'

application.js代码

// // Entry point for the build script in your package.json
// import "@hotwired/turbo-rails"
// import "./controllers"
import './react/src/index.js'
import * as bootstrap from "bootstrap"

路由代码(config/routes.rb)

Rails.application.routes.draw do
  # get 'home/index'
  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

  # Defines the root path route ("/")
  root "home#index"
end

内容的提问来源于stack exchange,提问作者Benjamin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:30:24