Я пытаюсь преобразовать класс Component в функциональный компонент, чтобы использовать React.useState hook и React.useEffect hook . Компонент делает запросы, чтобы проверить, существует ли токен на сервере.
import React, { Component } from 'react';
import { Loader, Dimmer, Transition, Message } from 'semantic-ui-react';
import axios from 'axios';
import { hasBeenVerified } from '../../store/reducers/users/index';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
function Confirmation({ match, isAccountVerified, hasBeenVerified }) {
var [token, setToken] = React.useState(null);
var [duration, setDuration] = React.useState(500);
var [responseMessage, setResponseMessage] = React.useState({});
var [error, setError] = React.useState(false);
React.useEffect(() => {
console.log('token ', token);
axios
.get(`http://localhost:8016/users/confirmation/${setToken(match.params.token)}`)
.then(response => {
if (response.status === 200) {
hasBeenVerified();
setResponseMessage(response.data.msg);
return;
}
})
.catch(function(error) {
if (error.response.status === 404) {
setResponseMessage(error.response.data.msg);
setError(true);
return;
}
if (error.response.status === 400) {
setResponseMessage(error.response.data.msg);
setError(true);
return;
}
});
return () => {
setToken(null);
setResponseMessage({});
setError(false);
};
}, [token, isAccountVerified, hasBeenVerified, setResponseMessage, setError]);
console.log('token ', token);
console.log('isAccountVerified ', isAccountVerified);
console.log('match', match);
console.log('responseMessage', responseMessage);
return (
<div className="login-form">
<Transition
visible={isAccountVerified}
unmountOnHide={true}
animation="scale"
duration={duration}
>
{!isAccountVerified ? (
<Dimmer active inverted>
<Loader />
</Dimmer>
) : (
<Message success={!error} error={error} header={responseMessage[0]} />
)}
</Transition>
</div>
);
}
function mapStateToProps(state) {
const { users } = state;
const { isAccountVerified } = users;
return { isAccountVerified };
}
const mapDispatchToProps = dispatch => bindActionCreators({ hasBeenVerified }, dispatch);
export default connect(
mapStateToProps,
mapDispatchToProps
)(Confirmation);
Я добавил значения в массив зависимостей, потому что это внешнее значение, от которого зависит . Я также добавил предписанную функцию очистки.
Может кто-нибудь предложить какое-либо понимание, почему он вообще не рендерит, т. Е. Успех, разные ошибки?