laravel [Vue警告]:水合节点不匹配

5gfr0r5j  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(209)

在我使用Vue 3,Laravel 10,Vite和Inertia.js的项目中,当我执行SSR(服务器端渲染)并在服务器端获得渲染时,我遇到了“水合节点不匹配”错误,因为服务器端渲染和客户端渲染不匹配。此错误的原因是在服务器端未正确确定移动的和桌面组件,从而导致不正确的呈现。我该如何解决此问题?
我似乎找不到一个解决方案,除了通过所有的组件和手动修复这个问题。然而,这个过程需要大量的时间,并且可能会对项目的性能产生负面影响,这是我不愿意做的。

mkshixfv

mkshixfv1#

我终于解决了这个问题。在Laravel端,我使用Jenssegers\Agent\Agent库来检查设备是否是移动的。然后,我将这些信息作为 prop 传递给客户端。根据收到的数据,我调整了组件,问题得到解决。
控制器;

use Jenssegers\Agent\Agent;
    
    class InertiaTestController extends Controller
    {
        public function dashboard()
        {
            $agent = new Agent();
            $isMobile = $agent->isMobile();
    
            return Inertia::render('Dashboard/Dashboard', [
                  'isMobile' => $isMobile
            ])
        }
    }

字符串
Dashboard.vue;

...
<DektopComponent v-if="isMobile"/>
<MobileComponent v-else/>
...

export default{
   isMobile: {
       type: Boolean,
   }
}

相关问题