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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:05:17