【发布时间】:2019-07-02 02:25:01
【问题描述】:
我有一个带有 Laravel 后端/React.js 前端的应用程序。我正在使用反应路由器,以便完成这项工作,我有任何指向控制器的路径,该控制器将视图与其中的组件一起加载。但是,当我在反应端添加嵌套路由时,即“blog/:blogId”,它似乎完全跳过了加载组件的标签,而是向我显示 Laravel 视图中的内容。
我原来有:
`Route::get('/{slug?}', 'ProjectsController@index'`
我试过了:
`Route::any('{path}', function($path){
$projects = Project::all();
$posts = Post::all();
return view('welcome', compact('projects', 'posts'));
})->where('path', '.*');`
这也不行:
`Route::get('/{slug?}/{id?}', 'ProjectsController@index'`
我想要的是 /blog 和 /blog/2 都转到 ProjectsController@index 以加载带有反应标记的视图。
我在ProjectsController中的索引函数中的数据是:
`$projects = Project::all();
$posts = Post::all();
//return $projects;
return view('welcome', compact('projects', 'posts'));`
以前有人遇到过这种情况吗?谢谢。
更新:
控制器索引方法返回的欢迎视图:
<div id="content"></div> 是我的基本组件正在加载的位置。因此,当导航到路由“/blog”时,我会看到我的组件,当导航到“/blog/anything”时,我会看到 Laravel 的登录和注册链接。
`@extends('layout')
@section('content')
@if (Route::has('login'))
<div class="top-right links">
@if (Auth::check())
<a href="{{ url('/home') }}">Home</a>
@else
<a href="{{ url('/login') }}">Login</a>
<a href="{{ url('/register') }}">Register</a>
@endif
</div>
@endif
<div id="content"></div>
@include('partials._scripts')
@endsection`
使用链接的组件:
`<a href={`/blog/${item.id}`} target="_blank">View here</a>
<Route path="/blog/:blogId" component={Post} />`
我在基础组件中的其他路由:
`<Switch>
<Route exact path="/" render={(props)=> <Home text={text} mobileNavIsOpen={hamburgerOpen} backgroundImage={background}/>} />
<Route path="/projects" component={Projects} />
<Route path="/blog" component={Blog} />
<Route component={NotFound} />
</Switch>`
我已尝试将 /blog/:blogId 路由与其他路由一起放在基础应用程序中 - 仍然没有区别。
更新:
当从 react router 中删除 /blog/ 路由标签并只保留 '/blog/:blogId 时,它具有相同的效果。
更新/部分解决:
将(\\d+) 添加到我的反应路由器路径:path={/blog/:id(\\d+)} 正确地将我带到了嵌套组件。但是,它确实也加载了刀片视图内容,因此作为临时修复,我取出了显示的刀片内容。很高兴看看是否有人有其他方法。谢谢。
【问题讨论】:
-
如果你想通过 laravel 路由处理 blog/:blogId 为什么需要 react 路由?
-
嗨@aseferov,并不是我希望它由laravel路由处理,而是我需要将任何路径(包括它们的子路径)指向处理我的组件的视图,以便做出反应。因此,如果我想要 blog:/blogId,我需要告诉 laravel 路由也将这些路径指向视图。
-
请在组件中添加浏览用户 blog/:blogId 的视图部分
-
@aseferov 请参阅上面的更新
-
您需要更改 /blog/${item.id}} target="_blank">查看此处 以响应链接组件 /blog/${item.id}}
标签: php reactjs laravel react-router laravel-routing