具有
fetchLogin
,您似乎正在更新redux存储,而存储更新不会立即发生,因此
errorcode
不是在你发出动作后立即正确的
您需要在中的errorcode上实现测试逻辑
componentDidUpdate (In view of version 16.3.0, Previously you would use componentWillReceiveProps)
方法
class LoginForm extends Component {
constructor(props) {
...
}
componentWillUnmount(){
clearTimeout(this.timeoutHandle);
}
handleName(evt) {
this.setState({name: evt.target.value})
}
handlePwd(evt) {
this.setState({pwd: evt.target.value})
}
handleLogin(evt) {
const { name, pwd } = this.state
const { fetchLogin } = this.props
let login = {
name: name,
pwd: pwd
}
fetchLogin(login)
}
loginSuccess() {
...
}
componentDidUpdate(prevProps) {
const {errorcode: prevErrorcode } = prevProps.loginItems;
const {errorcode } = prevProps.loginItems;
if(errorcode !== prevErrorcode) {
errcode === 0 && (
this.timeoutHandle = setTimeout(() => {
this.loginSuccess()
}, 1000)
)
}
}
render() {
const { errcode, errmsg } = this.props.loginItems
const { name, pwd } = this.state
return (
<FlexContainerCenterColumn>
<LoginInput
onChange={this.handleName}
value={name}>
</LoginInput>
<LoginInput
type="password"
onChange={this.handlePwd}
value={pwd}>
</LoginInput>
<SubmitButton
...
onClick={this.handleLogin}>
Login
</SubmitButton>
<LoginFoot>
{errcode === 1 && ...}
{errcode === 0 && ...}
</LoginFoot>
</FlexContainerCenterColumn>
);
}
}
export default connect(
(state) => ({
loginItems: state.login.loginItems
}),
{changeRoute, fetchLogin}
)(withRouter(LoginForm))