К моменту рендеринга компонента кажется, что componentDidMount
уже был вызван дважды, и поскольку учетная запись уже проверена, с сервера поступают разные данные.
Моя проблема в том, что мне нужен мой ключ API чтобы начать сеанс и иметь различные параметры, поступающие с сервера, определенного как логическое значение в объекте для условного рендеринга. Ключ API получен только для одной из этих опций, когда я только что подтвердил учетную запись.
componentDidMount
вызывается дважды, поэтому в первый раз я получаю ключ API, но не во второй раз. Я попытался использовать условное выражение внутри componentDidMount, чтобы вызов API был выполнен один раз, но состояние очищается после первого раза, поэтому он по-прежнему вызывается дважды.
class Verify extends Component {
state = {
APIkey: '',
token: '',
userHasJustBeenActivated: false,
newTokenCreated: false,
userDeleted: false,
userAlreadyActivated: false,
errorMessage: '',
dataWasFetched: false,
}
componentDidMount = () => {
console.log('this.state.dataWasFetched :', this.state.dataWasFetched)
if (this.state.dataWasFetched) {
return
} else {
console.log('location :', this.props.location)
axios
.get(`/api/auth/verify${this.props.location.search}`)
.then(res => {
console.log(JSON.stringify(res.data))
const {
APIkey,
userHasJustBeenActivated,
newTokenCreated,
userDeleted,
userAlreadyActivated,
} = res.data
this.setState({
APIkey: APIkey,
userHasJustBeenActivated: userHasJustBeenActivated,
newTokenCreated: newTokenCreated,
userDeleted: userDeleted,
userAlreadyActivated: userAlreadyActivated,
dataWasFetched: true,
}, () => {
if (APIkey) {
cookies.setCookie('session', APIkey)
console.log('this.state :', this.state)
this.props.update()
}
})
})
.catch(err => {
const { data } = err.response
this.setState({
errorMessage: data,
})
})
}
}
Я попытался добавить условное выражение с dataWasFetched, чтобы вызов для API будет сделано только один раз, но кажется, что состояние очищается с каждым новым вызовом. Когда я проверяю консоль, значение state.dataWasFetched
равно false, а this.state
не регистрируется во втором вызове.