Прежде всего, пожалуйста, извините меня по-английски, я не являюсь носителем языка.
Я постараюсь объяснить все возможное.
Я пытаюсь установить состояние моего компонента равным значению, полученному из http-запроса, который выполняется на componentDidMount (). После setState я передаю реквизиты дочерним компонентам и ожидаю, что они будут перерисованы.
//App.js
import getAuthStateFromServer from './getAuthStateFromServer'
class App extends React.Component {
constructor(props) {
super(props)
this.state = {
AuthState
}
this.getAuthState.bind(this)
}
componentDidMount() {
this.getAuthState()
}
getAuthState() {
getAuthStateFromServer().then(AuthState =>
this.setState({ AuthState })
)
}
render() {
return <h1>{this.state.AuthState.userData.userName}</h1>
}
}
//getAuthStateFromServer.js
import axios from 'axios'
import { getAuth } from './AuthStorage'
const getAuthStateFromServer = () => new Promise((resolve, reject) => {
// Create AuthState object
const AuthState = {
userData: {},
isLoggedIn: false,
}
// 1. get token
const { token } = getAuth()
// 2. if have token
if(token) {
// authenticate!
// send get request with token in header
axios.get('http://localhost:3500/validate', {
headers: { 'Authorization': `Bearer ${token}` }
}).then((res) => {
AuthState.userData = res.data
AuthState.isLoggedIn = true
resolve(AuthState)
}).catch(e => reject(e))
}
resolve(AuthState)
})
export default getAuthStateFromServer
Итак, я получил объект AuthState, когда я вошел в консоль, но мой компонент не перерисовал.
Но если я возьму то, что находится внутри моей функции getAuthFromServerFunction, и вставлю ее в мой componentDidMount, как это ..
componentDidMount() {
this.getAuthState()
}
getAuthState() {
const AuthState = {
userData: {},
isLoggedIn: false,
}
// 1. get token
const { token } = getAuth()
axios.get('http://localhost:3500/validate', {
headers: { 'Authorization': `Bearer ${token}` },
}).then((res) => {
AuthState.userData = res.data
AuthState.isLoggedIn = true
this.setState({ AuthState })
})
}
Это работает .. и мой компонент перерисовывается
Я полностью в замешательстве, пытаясь понять это ..
Любая помощь будет принята с благодарностью, спасибо