我将React集成到了laravel项目中。我开始使用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>
Index.blade
@extends('layouts.app')
@section('content')
<Call> </Call>
@endsection
反应
App.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();
答案 0 :(得分:0)
目标容器不是DOM元素,因为在您的HTML中,您没有div
,其ID为app
。
您应将layouts.app
的html更改为此:
<body>
<div id="app" class="main">
@section('content')
</div>
<script src="{{ asset('js/test.js') }}"></script>
<script src="{{ asset('js/app.js') }}"></script>
</body>
答案 1 :(得分:0)
放入您的
ListView
在网络路线的末尾,以便最后将其加载以获取所有视图
答案 2 :(得分:0)
默认情况下 Laravel(6) 已经在使用 id="app"
所以在你的 react index.blade.php,即你定义你的 react 入口点的地方,使用不同的 id 名称来防止 react App.js 覆盖你的普通 Laravel 文件,即:
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>
App.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 路由。