Laravel
プロジェクトでReact Router
を使用する必要があります。
しかし、React Router
でルーターを作成してアクセスしようとすると、Laravel
はルートが存在しないというエラーを非難します。
マネージャーにReact Router
を使用する方法Laravelプロジェクトルート?
render((
<Router history={browserHistory}>
<Route path="/" component={App}/>
<Route path="/profile" component={Profile}/> // this route I trying access
</Router>
), document.getElementById('root'));
次のように、すべてを1つのコントローラーにマップするルートを作成します。
Route::get('/{path?}', [
'uses' => 'ReactController@show',
'as' => 'react',
'where' => ['path' => '.*']
]);
次に、コントローラーで、反応するルートドキュメントを含むHTMLページを表示します。
class ReactController extends Controller {
public function show () {
return view('react');
}
}
次に、反応ルーターを使用して通常どおりすべてを実行します。私にとってはうまくいくようです。
Laravel 5.5の更新あなたのルートファイル:
Route::view('/{path?}', 'path.to.view')
->where('path', '.*')
->name('react');
ジェイク・テイラーの回答に基づいています(ちなみに正しいです):少し間違いがありますが、最後の'/{path?}'
の後に引用符がありません。
また、コントローラーを使用する必要がなく、ビューにリダイレクトするだけの場合は、次のように使用できます。
Route::get( '/{path?}', function(){
return view( 'view' );
} )->where('path', '.*');
注:このルートを必ずルートファイルのすべてのルートの最後に追加してください(web.php for Laravel 5.4)。あなたが持っているルートは、この最後のルートに到達する前にキャッチされることがあります。
V4を使用している場合は、<HashRouter>
?
例えば。
import React from 'react';
import {
HashRouter,
Route,
Link
}from 'react-router-dom';
import Profile from './Profile';
export default class App extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<HashRouter>
<div>
<div>
<ul>
<li><Link to="/profile" replace>Profile</Link></li>
</ul>
</div>
<div>
<Route path="/profile" component={Profile}/>
</div>
</div>
</HashRouter>
);
}
}
Laravelのルーターで...
Route::get('/', function(){
return view('index'); //This view is supposed to have the react app above
});
HashRouter
を使用すると、クライアント側のルーティングは#
(フラグメント識別子)、Laravelのルーティング(つまり、サーバー側のルーティング)によって読み取られません
このページに到着すると、URLは/
。
リンクをクリックすると、URLが/#/posts
とコンポーネントが表示されます。
その後、ページを更新しても、Route not exist
エラー。これは、Laravelの観点からすると、URLがまだ/
。 (コンポーネントProfile
はまだ残っています。)
https://reacttraining.com/react-router/web/api/HashRouter
私の説明が明確であることを願っています。
インデックスページを返すことができ、ReactのbrowserHistoryは他のものを処理します。
Route::pattern('path', '[a-zA-Z0-9-/]+');
Route::any( '{path}', function( $page ){
return view('index');
});
これは私のために働くようです
Route::get('{reactRoutes}', function () {
return view('welcome'); // your start view
})->where('reactRoutes', '^((?!api).)*$'); // except 'api' Word
Route::get('api/whatever/1', function() {
return [
'one' => 'two',
'first' => 'second'
];
});
Route::get('api/something/2', function() {
return [
'hello' => 'good bye',
'dog' => 'cat'
];
});