Skip to content

Instantly share code, notes, and snippets.

@srph
Last active January 22, 2019 02:39
Show Gist options
  • Save srph/faf99b14748dfaad16e064889d4b202f to your computer and use it in GitHub Desktop.
Save srph/faf99b14748dfaad16e064889d4b202f to your computer and use it in GitHub Desktop.
React Router: Nested error 404
// 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