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

React on Rails项目中createRoot导入路径错误的解决方案咨询

解决React 18 + Rails项目中createRoot导入警告问题

问题根源

React 18将createRoot方法从react-dom核心包迁移到了react-dom/client子包,你的项目仍在使用旧的渲染逻辑;同时参考的教程基于React Router旧版本,路由写法不符合v6规范。

分步解决方案

1. 修正React根渲染逻辑

找到项目的React入口文件(通常是app/javascript/packs/application.js或app/javascript/application.js),替换为React 18的createRoot写法:

// 替换旧的导入
// import ReactDOM from 'react-dom';
import { createRoot } from 'react-dom/client';
import App from './components/App'; // 根据你的组件实际路径调整

// 获取页面中的根DOM节点
const rootElement = document.getElementById('root');
const root = createRoot(rootElement);

// 渲染应用
root.render(<App />);

2. 适配React Router v6的路由写法

你当前代码使用了已废弃的render属性,且exact属性在React Router v6中已被移除(默认就是精确匹配),修正后的组件代码如下:

import React from "react"
import { BrowserRouter as Router, Route, Routes } from 'react-router-dom'
import HelloWorld from './HelloWorld'; // 必须导入HelloWorld组件

class App extends React.Component {
  render () {
    return (
      <Router>
        <Routes>
          <Route path="/" element={'home'} />
          <Route path="/hello" element={<HelloWorld greeting="Friend" />} />
        </Routes>
      </Router>
    );
  }
}

export default App

3. 确认依赖兼容性

你使用的react_ujs@2.6.2版本已支持React 18,无需降级依赖。如果项目使用jsbundling-rails或webpacker,确保配置文件(如package.json脚本、webpack.config.js)没有强制绑定旧版React的导入逻辑。

验证

修改完成后重启Rails服务器和前端编译进程(使用bin/dev可自动重启),警告应会消失,路由功能可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:07:36