我正在编写一个函数,使用ajax调用来命中API端点以获取当前用户,它可以是匿名用户或实际用户。如果initial
变量在构造函数中使用,则设置为true,如果在其他地方使用,则为false。不知道这是否是正确的方法,或者代码是否干净,例如:使用initial来切换setState和this.state赋值是否有正确的反应方式?
loadCurrentUser(initial = false) {
$.ajax({
type: 'GET',
url: 'accounts/api/users/current',
}).done((responseData) => {
const data = responseData.data;
const isAuthenticated = data.is_authenticated;
let stateData;
if (isAuthenticated) {
stateData = {
displayName: data.display_name,
reputationPoint: data.reputation_point,
};
} else {
stateData = {
displayName: null,
reputationPoint: null,
};
}
if (initial) {
this.state = stateData;
} else {
this.setState(stateData);
}
});
}
答案 0 :(得分:0)
这可以简化为:
state = {displayName: null, reputationPoint: null}
componentWillMount() {
this.loadCurrentUser()
}
loadCurrentUser() {
$.ajax({
type: 'GET',
url: '/accounts/api/users/current',
}).done(responseData => {
const {is_authenticated, display_name, reputation_point} = responseData.data;
if (is_authenticated) {
this.setState({
displayName: display_name,
reputationPoint: reputation_point,
});
}
});
}
主要是在构造函数级别设置初始值总是一个好主意,让它为空/空值。然后,您可以根据需要从任何地方拨打setState
。否则,因为异步AJAX请求可能会被引用,只要您引用this.state.displayName
或任何内容,就会产生错误。