简化反应功能以获得当前用户

时间:2017-05-15 16:11:28

标签: reactjs

我正在编写一个函数,使用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);
  }
});
}

1 个答案:

答案 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或任何内容,就会产生错误。