Я пытаюсь создать проект Laravel с использованием ReactJS. Я сделал показать данные в таблице. Однако, когда я добавляю некоторые ссылки, такие как Создать, изменить, удалить... , возникают некоторые ошибки:
- Failed context type: The context `router` is marked as required in `Link`, but its value is `undefined`.
- Uncaught Error: You should not use `Link` outside a `Router`
Так:
Я новичок, поэтому, пожалуйста, помогите мне. Спасибо. Вот мой код:
Пример.js
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import axios from 'axios';
import {Link} from "react-router-dom";
import CreatePost from './CreatePost';
import RoutePath from '../routes/RoutePath';
...
postRow(p){
return (
<tr key = {p.id}>
<td>{p.title}</td>
<td>{p.description}</td>
<td><Link to='/edit'></Link></td>
<td><Link to='/delete'></Link></td>
</tr>
)
}
render() {
const posts = this.state.posts.map(post => this.postRow(post));
return (
<div>
<table border = "1">
<thead>
<tr>
<th>Title</th>
<th>Description</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
{ posts }
</tbody>
</table>
<div>
<Link to='/add-post'>Add</Link>
</div>
</div>
);
}
}
ReactDOM.render(
<Example />
, document.getElementById('homepage')
);
RoutePath.js
import React, {Component} from 'react';
import { Route, BrowserRouter } from "react-router-dom";
import CreatePost from '../components/CreatePost';
import Example from '../components/Example';
export default class RoutePath extends Component{
render(){
return(
<BrowserRouter>
<div>
<Route exact path='/' component = {Example}/>
<Route path='/add-post' component = {CreatePost}/>
<Route path='/edit' component = {Edit}/>
</div>
</BrowserRouter>
)
}
}





RoutePath вам нужно импортировать Switch из
'react-router-dom' сначала.Example, иначе вы должны рендерить в RoutePathRoutePath в вашем app.js.require('./homeComponents/RoutePath');
import React, {Component} from 'react';
import ReactDOM from 'react-dom';
import { Route, BrowserRouter, Switch } from "react-router-dom";
import CreatePost from '../components/CreatePost';
import Example from '../components/Example';
export default class RoutePath extends Component{
render(){
return(
<BrowserRouter>
<Switch>
<Route exact path='/' component = {Example}/>
<Route path='/add-post' component = {CreatePost}/>
<Route path='/edit' component = {Edit}/>
</Switch>
</BrowserRouter>
)
}
}
ReactDOM.render(
<RoutePath />
, document.getElementById('homepage')
);
import React, { Component } from 'react';
import axios from 'axios';
import {Link} from "react-router-dom";
import CreatePost from './CreatePost';
import RoutePath from '../routes/RoutePath';
postRow(p){
return (
<tr key = {p.id}>
<td>{p.title}</td>
<td>{p.description}</td>
<td><Link to='/edit'></Link></td>
<td><Link to='/delete'></Link></td>
</tr>
)
}
render() {
const posts = this.state.posts.map(post => this.postRow(post));
return (
<div>
<table border = "1">
<thead>
<tr>
<th>Title</th>
<th>Description</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
{ posts }
</tbody>
</table>
<div>
<Link to='/add-post'>Add</Link>
</div>
</div>
);
}
}
Итак, в основном поток здесь:
app.js в /public/js по умолчанию.app.js требуется RoutePath, который содержит все ваши данные маршрутизации.RoutePath пытался отобразить весь ваш компонент, который у вас есть в корне ('/'), и он отобразил Example'homepage' id в вашем лезвии.Я понимаю. Большое спасибо!
Могу я задать еще один вопрос? Когда я добавляю сообщение и нажимаю кнопку «Добавить», я хочу, чтобы оно автоматически перенаправлялось на домашнюю страницу или любую страницу, которую я хочу, так как я могу это сделать? Я искал в Интернете и нашел «browserHistory» от «react-router», но похоже, что его не существует из-за новой версии React.
Если вы визуализируете объект <Redirect/>, когда вам нужно перенаправить его, он должен работать.
Это работает для меня... Мое единственное представление для моего одностраничного приложения — home.blade.php, и я использую BrowserRouter в своем App.js
Route::get('/', function () {
return view('home');
});
Route::get('/{route}',function(){
return view('home');
});
Это позволит вам перейти на http://локальный/ и получить домашнюю страницу приложения или http://localhost/о нас и получить маршрут «о нас».
Это лучший метод, чем использование HashRouter, который выглядел бы немного уродливее: http://localhost/#/о нас
Чтобы добавить к тому, что предложил @manley13. Вы также можете сделать это одним вызовом get:
Route::get('/{route?}',function(){
return view('home');
});
? делает route необязательным.
Вы пытаетесь рендерить
<Example />непосредственно вExample.js, вместо этого вы должны позволить ему рендериться изRoutePath, поскольку он завернут в маршрутизатор.