[英]How to use Laravel routes over react router
我在我的 Laravel 项目中集成了 React。 我开始使用 react 路由器,但现在我想切换回 Laravel 路由。
是否可以像 Vue 一样将我的 react 组件全局注入到我的刀片文件中?
为了设置 React 路由,我使用了以下通配符:
Route::view('/{path?}', 'layouts.app');
当我尝试恢复正常的 Laravel 路由时,出现以下错误
错误
未捕获的错误:目标容器不是 DOM 元素。
我的 web.php
Route::get('/', 'PageController@index');
控制器
class PageController extends Controller
{
public function index()
{
return view('layouts.index');
}
}
Layouts.app 文件
<body>
<div class="main">
@section('content')
</div>
<script src="{{ asset('js/test.js') }}"></script>
<script src="{{ asset('js/app.js') }}"></script>
</body>
索引刀片
@extends('layouts.app')
@section('content')
<Call> </Call>
@endsection
反应
应用程序.js
import React, { Component } from 'react'
import ReactDOM from 'react-dom'
import { BrowserRouter, Route, Switch } from 'react-router-dom'
import Header from './Header'
import Call from './Call'
import Recipient from './Recipient';
import Avatar from './Avatar';
import registerServiceWorker from '../registerServiceWorker';
class App extends Component {
render () {
return (
<BrowserRouter>
<div>
<Header />
<Switch>
<Route exact path='/' component={Call} />
<Route exact path='/rusthuis' component={Recipient} />
<Route exact path='/avatar' component={Avatar} />
</Switch>
</div>
</BrowserRouter>
)
}
}
ReactDOM.render(<App />, document.getElementById('app'))
registerServiceWorker();
目标容器不是 DOM 元素,因为在您的 HTML 中,您没有div
的 id 为app
。
你应该将你的 html 更改为layouts.app
:
<body>
<div id="app" class="main">
@section('content')
</div>
<script src="{{ asset('js/test.js') }}"></script>
<script src="{{ asset('js/app.js') }}"></script>
</body>
默认情况下,Laravel(6) 已经在使用id="app"
所以在你的 react index.blade.php,即你定义你的 react 入口点的地方,使用不同的 id 名称来防止 react App.js覆盖你的普通 Laravel 文件IE:
index.blade.php
<!doctype html>
<html lang="{{ app()->getLocale() }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- csrf token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<!-- styles -->
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400&display=swap" rel="stylesheet">
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>
<body>
<div id="app-react"></div>
<script src="{{ asset('js/app.js') }}"></script>
</body>
</html>
应用程序.js
import React from "react";
import { BrowserRouter as Router, Switch, } from "react-router-dom";
import Home from "./Home";
function App() {
return (
<React.Fragment>
<Navbar />
<Switch>
<Route exact path="/" component={Home}></Route>
<Route component={Default}></Route>
</Switch>
</React.Fragment>
);
}
export default App;
if (document.getElementById("app-react")) {
ReactDOM.render(
<Router>
<App />
</Router>,
document.getElementById("app-react")
);
}
使用以下路线
Route::get('/{path?}',function(){
return view('app');
});
{path?}
代表任何东西(单词)
第一级 URL 会影响反应,但更高级别即
Route::view('/user/links','bladefile')
在我们的案例中,链接将是合法的 Laravel 路由。
把你的
Route::view('/{path?}', 'layouts.app');
在 web 路由的末尾,以便它最终加载以获取您的所有视图
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.