# 修复前端页面双重渲染导致导航栏重复显示
## 1。问题描述
线上环境访问官网首页时,顶部导航栏出现两次(重复显示)。本地开发环境正常,代码完全相同。
## 2。原因分析
1. `PageRenderService::render()` 方法不仅渲染了组件内容,还调用了 `wrapWithLayout()` 将内容包裹成完整的 HTML 页面(包含导航栏)
2. `PageController` 返回视图时,又将这个完整的 HTML 页面赋值给 `$content`,嵌入到 `app.blade.php` 布局中
3. 导致同一个页面被嵌套了两次,导航栏也随之重复出现
## 3。解决方案
修改 `PageRenderService::render()` 方法,只返回组件内容,布局统一由 `PageController` 通过视图渲染。
**修改文件**:`app/Services/PageRenderService.php`
**修改前**:
```php
public function render(Page $page): string
{
$components = $page->components()->orderBy('sort_order')->get();
$html = '';
foreach ($components as $component) {
$html .= $this->renderComponent($component);
}
return $this->wrapWithLayout($page, $html);
}
```
**修改后**:
```php
public function render(Page $page): string
{
$components = $page->components()->orderBy('sort_order')->get();
$html = '';
foreach ($components as $component) {
$html .= $this->renderComponent($component);
}
return $html;
}
```
## 4。修改文件清单
| 文件 | 操作 | 说明 |
|------|------|------|
| `app/Services/PageRenderService.php` | 修改 | 移除 `wrapWithLayout` 调用,只返回组件 HTML |
## 5。验证结果
| 验证项 | 预期结果 | 实际结果 |
|--------|---------|---------|
| 前台首页导航栏 | 只显示一次 | ✅ |
| 组件内容 | 正常渲染 | ✅ |
| 静态页面生成 | 导航栏正常 | ✅ |
## 6。提交记录
```bash
git add app/Services/PageRenderService.php
git commit -m "fix(render): 修复双重渲染导致导航栏重复显示问题"
git push origin main