Last active
January 22, 2019 02:39
-
-
Save srph/faf99b14748dfaad16e064889d4b202f to your computer and use it in GitHub Desktop.
React Router: Nested error 404
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Error404Context.js | |
export default {Provider, Consumer} = React.createContext() | |
// Error404Provider.js | |
class Error404Provider extends React.Component { | |
state = { | |
isError: false | |
} | |
render() { | |
return <Provider value={{ | |
isError: this.state.isError, | |
onErrorToggle: this.handleErrorToggle | |
}}> | |
{this.state.isError | |
? <p>Oops ERROR <button onclick={this.handleErrorToggle}>GO BACK</button></p> | |
// The routes | |
: this.props.children} | |
</Provider> | |
} | |
handleErrorToggle = () => { | |
this.setState({ | |
isError: !this.state.isError | |
}) | |
} | |
} | |
// Error404Route.js | |
class Error404Route extends React.Component { | |
componentDidMount() { | |
this.props.onErrorToggle() | |
} | |
render() { | |
return null | |
} | |
} | |
const WrappedError404Route = () => { | |
return ( | |
<Consumer> | |
{({isError, onErrorToggle}) => <Error404Route isError={isError} onErrorToggle={onErrorToggle} />} | |
</Consumer> | |
) | |
} | |
export default WrappedError404Route | |
// routes | |
<Router> | |
<Error404Provider> | |
<Route> | |
<Switch> | |
<Route component={WrappedError404Route} /> | |
</Switch> | |
</Route> | |
</Error404Provider> | |
</Router> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment