<Route exact path="/" component={SignupForm} />
<ProtectedRoute path="/home" component={Home} /> {/* если что, будет редиректить на "/" */}
<Route path="/login" component={LoginForm} />
import React from 'react';
import { Route, Redirect, useLocation } from 'react-router-dom';
export const PrivateRoute = (props) => {
const token = localStorage.getItem("myToken");
const location = useLocation();
if (token) {
return <Route {...props} />
}
return (
<Redirect to={{ pathname: '/', state: { from: location } }} />
);
};
// Use Private Route
import { PrivateRoute } from './PrivateRoute';
import { Home } from './Home';
<PrivateRoute path="/home">
<Home />
</PrivateRoute>
import { withRouter } from "react-router-dom";
class MyComponent extends React.Component {
...
render() {
const { history } = this.props;
...
}
}
export default withRouter(MyComponent);
history.push
- заменять не надо.withFormik()
https://jaredpalmer.com/formik/docs/api/withFormik. onSubmit: async (formValues) => {
try {
const res = await .........
if(Array.isArray(res)){
const err = res[0].message;
return (<div className="err-response">{err}</div>);
// ^ это не return из реакт-компонента, а из функции обработчика сабмита формы
// рендериться ничего не будет
}
},
const SignupForm = () => {
const [errorMessage, setErrorMessage] = React.useState(null)
....
if(Array.isArray(res)){
// то есть ошибка это когда res - массив?
setErrorMessage (res[0].message)
// теперь в errorMessage у нас текст ошибки, а не null
}
....
return (
<div className="form">
{ errorMessage && <p>${errorMessage}</p> }
{/* ^ если там null, то ничего не будет писаться */}
.....
</div>
)
}