Reagieren Router v4
Es gibt ein paar Dinge, die ich diese Arbeit reibungslos zu bekommen benötigt.
Die Doc-Seite auf hat ziemlich viel, was erforderlich ist.
Allerdings hatte ich drei Fragen
- Woher kommt der
props.history
kommen aus?
- Wie gebe ich es durch meine Komponente, die innerhalb der
Route
Komponente nicht direkt ist
- Was passiert, wenn ich andere
props
will?
ich landete mit:
- Option 2 von an answer on 'Programmatically navigate using react router' - das heißt
<Route render>
verwenden, die Sie props.history
bekommt, die an die Kinder können dann weitergegeben.
- Verwenden Sie die
render={routeProps => <MyComponent {...props} {routeProps} />}
kombinieren andere props
von this answer on 'react-router - pass props to handler component'
N. B. Mit der render
Methode müssen Sie die Props von der Route
Komponente explizit durchlaufen. Sie möchten auch render
und nicht component
aus Leistungsgründen verwenden (component
erzwingt ein erneutes Laden jedes Mal).
const App = (props) => (
<Route
path="/home"
render={routeProps => <MyComponent {...props} {...routeProps}>}
/>
)
const MyComponent = (props) => (
/**
* @link https://reacttraining.com/react-router/web/example/auth-workflow
* N.B. I use `props.history` instead of `history`
*/
<button onClick={() => {
fakeAuth.signout(() => props.history.push('/foo'))
}}>Sign out</button>
)
Einer der verwirrenden Dinge fand ich, dass sie in nicht wenigen der React Router v4 docs verwenden MyComponent = ({ match })
dObject destructuring, die ich war nicht klar, ursprünglich gemeint, dass Route
drei Stützen geht nach unten, match
, location
und history
Ich denke, einige der anderen Antworten hier davon aus, dass alles über JavaScript-Klassen erfolgt.
Hier ist ein Beispiel, und wenn Sie props
durch Sie nicht nur verwenden können, übergeben müssen component
class App extends React.Component {
render() {
<Route
path="/home"
component={MyComponent}
/>
}
}
class MyComponent extends React.Component {
render() {
/**
* @link https://reacttraining.com/react-router/web/example/auth-workflow
* N.B. I use `props.history` instead of `history`
*/
<button onClick={() => {
this.fakeAuth.signout(() => this.props.history.push('/foo'))
}}>Sign out</button>
}
}
@Alex Die Methode wird jetzt als Requisite durch Kontext übergeben. Aber ich habe immer noch mehrere Probleme mit diesem Zeug in der Produktion – CESCO
Das bedeutet also, ich muss zu den Kindkomponenten das Router-Objekt selbst übergeben, richtig? – Alex
Nein, Router wird schon da sein, keine Notwendigkeit zu bestehen –