Laravel+React+Breeze页面重复渲染求助:console.log执行两次
解决Laravel + React + Breeze中组件代码重复执行的问题
以下是针对重复日志/重复执行问题的排查和解决步骤:
1. 检查React Strict Mode的影响
React的Strict Mode在开发环境下会重复执行组件渲染、副作用函数(包括console.log、useEffect回调等),目的是检测潜在的代码问题。这是开发环境的正常行为,但生产环境不会出现。
- 解决:打开
resources/js/app.jsx,移除<React.StrictMode>对<App>组件的包裹:// 原代码 createRoot(el).render(<React.StrictMode><App {...props} /></React.StrictMode>); // 修改后 createRoot(el).render(<App {...props} />);
2. 排查Inertia初始化逻辑
确保app.jsx中没有重复初始化Inertia或重复挂载组件的代码:
- 正确的初始化代码应该只调用一次
createInertiaApp,且只有一个createRoot挂载逻辑,示例:import { createRoot } from 'react-dom/client'; import { createInertiaApp } from '@inertiajs/react'; import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers'; createInertiaApp({ resolve: (name) => resolvePageComponent(`./Pages/${name}.jsx`, import.meta.glob('./Pages/**/*.jsx')), setup({ el, App, props }) { createRoot(el).render(<App {...props} />); }, }); - 检查是否存在额外的
render调用或重复的Inertia配置。
3. 检查Vite配置与脚本引入
- 打开
vite.config.js,确认只配置了一个入口文件(通常是resources/js/app.jsx),避免重复打包:import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; import react from '@vitejs/plugin-react'; export default defineConfig({ plugins: [ laravel({ input: 'resources/js/app.jsx', refresh: true, }), react(), ], }); - 查看根Blade模板(如
resources/views/app.blade.php),确保只通过@vite('resources/js/app.jsx')引入一次脚本,没有重复的脚本标签或@vite指令。
4. 验证组件的渲染上下文
确认页面组件(如Welcome.jsx)没有被多次嵌套或在路由中重复注册:
- 检查
routes/web.php中的Inertia路由,确保每个页面只被定义一次:Route::get('/', function () { return Inertia::render('Welcome'); }); - 避免在父组件中多次渲染Welcome组件。
内容的提问来源于stack exchange,提问作者dGame
相关产品推荐
相关产品推荐

