Ich arbeite an meiner ersten React App und einige Probleme mit dem Routing, nur auf der Suche nach einigen Leitlinien. Ich sehe, dass dies ein spezifisches Problem für viele Menschen ist, aber Schwierigkeiten haben, anderen Antworten zu folgen.React-Router dieselbe URL nicht remoaming, versucht herauszufinden, componentWillReceiveProps
Von dem, was ich von anderen Antworten erzählen kann, weisen die Leute Schlüssel zu bestimmten Routen zu und prüfen den Schlüssel in componentWillReceiveProps (nextProps). Ich verstehe das, obwohl ich nicht sicher bin, wohin ich von dort aus hinübergehen sollte, um es neu zu rendern.
Ich versuche nur, zwischen den URLs /catalog/genre/:genre
und /catalog/genres
zu wechseln. Entschuldigung im Voraus für den unordentlichen Code, nur versuchen, es zum Funktionieren zu bringen!
App.js enthält Hauptrouten, insbesondere für dieses Problem:
<Route path="/catalog/genres" component={Genres}/>
Genres.js:
import React, { Component } from 'react';
import {
Link,
BrowserRouter as Router,
Route,
} from 'react-router-dom';
class Genre extends Component {
constructor(props) {
super(props);
console.log(props);
this.state = {
data: [],
};
}
componentDidMount() {
fetch('http://localhost:3000/catalog/genre/58eacca74a0d2c105c68fbe9')
.then(response => response.json())
.then(json => {
this.setState({
data: json.genre_books
});
});
}
componentWillReceiveProps(newProps) {
console.log(newProps.params);
}
render() {
return (
<div>
<div>
Genre:
<label>
<ul>
{
this.state.data.map((piece) =>
<Link key={piece._id} to={`${piece.url}`}>
<li>
{piece.title}
</li>
</Link>
)
}
</ul>
</label>
</div>
</div>
);
}
}
class AllGenres extends Component {
constructor(props) {
super(props);
this.state = {
data: [],
}
}
componentDidMount() {
fetch('http://localhost:3000/catalog/genres')
.then(response => response.json())
.then(json => {
this.setState({
data: json.genres_list
});
});
}
render() {
return (
<div>
All Genres:
<label>
<ul>
{
this.state.data.map((piece) =>
<Link key={piece._id} to={`${piece.url}`}>
<li>
{piece.name}
</li>
</Link>
)
}
</ul>
</label>
</div>
);
}
}
class Genres extends Component {
constructor(props) {
super(props);
this.state = {
data: [],
}
}
componentDidMount() {
fetch('http://localhost:3000/catalog/genres')
.then(response => response.json())
.then(json => {
this.setState({
data: json.genres_list
});
});
}
render() {
return (
<div>
<Router>
<div>
<Route path="/catalog/genre/:genre" render={() => (
<Genre testKey='1'/>
)}/>
<Route exact path="/catalog/genres" render={() => (
<AllGenres testKey='2' />
)}/>
</div>
</Router>
</div>
);
}
}
export default Genres;