我有一个使用redux和axios的react应用程序。我不希望在从服务器获取一些信息之前呈现任何内容,我正在通过axios检索这些信息。
我认为最好的方法是基于那个axios调用初始化redux状态。
但是,我的函数似乎没有为状态初始化及时返回任何内容…
function getUserData() {
if (Auth.loggedIn()) { //leaving this here bc it could be important; Auth is another class and loggedIn returns a boolean
axios.get('/route').then(res => {
console.log(res.data); //This prints the right thing (an object)
return res.data;
});
} else {
return ' '; //This works fine; state gets initialized to ' '
}
}
let userData = getUserData();
console.log(userData); //When getUserData() returns ' ', this prints ' '. However, when getUserData() returns my object, this prints undefined.
const initialState = {
userData: userData
};
我意识到这可能是因为getuserdata()是异步的,并且console.log(userdata)在getuserdata()完成之前运行。但是,我试着:
getUserData().then(function(userData) {
console.log(userData);
});
并收到“typeerror:无法读取属性”then“of undefined”。我的函数显然没有返回承诺,所以这不意味着它不是异步的吗?
有什么想法吗?
或者,有更好的方法来做这个吗?我总是可以设置初始状态,然后立即更改它,并使渲染等待更改完成,使用条件渲染,但这显然看起来更糟。