【发布时间】:2020-07-05 04:44:09
【问题描述】:
我正在尝试将类组件转换为功能组件以利用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);
我已添加values to the dependency array because it is an outside value it depends on。我还添加了规定的清理功能。
谁能提供任何见解为什么它根本不渲染,即成功,不同的错误结果?
【问题讨论】:
-
我将您的组件写得更好一些,并将其作为另一个答案发布。另外,我为您的动机问题投了赞成票。希望第二个答案可以帮助您更好地编写组件并更具可读性。
-
亲爱的安东尼奥,感谢您对我的支持。我想第一个答案更适合这篇文章。第二个只是描述干净的代码。第一个实际上,解释问题的原因。真的谢谢。如果对您有帮助,请查看我的个人资料并阅读我的简历。
标签: reactjs token react-hooks use-effect use-state