我在ReactJS上遇到一个问题,即Axios请求链接到componentDidMount函数的无限循环。
这是东西:
要检查令牌,我通过componentDidMount发出了POST请求。
最后,我得到正确的渲染,但是一次又一次地调用我的请求,从而在服务器上创建了一个无限循环。看来我的子组件一次又一次地重新构造。
这是我的代码:
WHERE (col LIKE '%A%' AND col LIKE '%B%') OR (col LIKE '%C%' AND col LIKE '%D%')
import React from 'react';
import {Container} from 'reactstrap';
export default class ResetPassword extends React.Component {
constructor(props) {
super(props);
console.log('CONSTRUCT')
}
componentDidMount() {
if (this.props.appState.loading ≡ false) {
console.log('componentDidMount')
let url = window.location.pathname;
let verifToken = url.substr(15);
this.props.checkToken(verifToken); //Make axios call on App.js
}
}
render() {
const {expiredToken} = this.props.appState;
console.log(expiredToken)
return (
<div className="ResetPassword">
<Container>
{expiredToken === true ?
(<div>VOTRE TOKEN A EXPIRE</div>
) : (<div>CHANGER MON MOT DE PASSE</div>)}
</Container>
</div>
)
}
}
在我的控制台DevTool中,我有5个console.log(),这会变成一个无限循环:
答案 0 :(得分:1)
从checkToken
组件中删除ResetPassword
。
与其从checkToken
调用ResetPassword
,而是在Parent
组件中调用它,然后使用state
到ResetPassword
组件传递数据。
<ResetPassword appState={...this.state} {...props}/>
答案 1 :(得分:-1)
我认为在第一次加载childComponent并调用了checkToken函数之后,状态加载设置为false。您还使用setSatate强制从父组件重新渲染,并用它还强制从Chilcomponent挂载和从子组件强制componentDidMount方法。在第一次渲染之后,如果您尝试打印加载状态,请确保在第一次为true之后始终为false。
尝试为每个孩子创建本地状态,或再次考虑该功能的新实现。