Javascript React Js,在ajax响应之前重新渲染

Javascript React Js,在ajax响应之前重新渲染,javascript,ajax,reactjs,refluxjs,Javascript,Ajax,Reactjs,Refluxjs,我希望通过api调用获得我的用户列表,并呈现一个包含数据的表 目前我可以得到数据,但我试图显示它,我有一个错误 我认为react是在api调用结束之前呈现的,我不明白为什么 这是我的密码: var Actions = Reflux.createActions([ "fetchList" ]); 这是我的商店: var bannersStore = Reflux.createStore({ users: { data : {}}, listenables: [Actions],

我希望通过api调用获得我的用户列表,并呈现一个包含数据的表

目前我可以得到数据,但我试图显示它,我有一个错误

我认为react是在api调用结束之前呈现的,我不明白为什么

这是我的密码:

var Actions = Reflux.createActions([
  "fetchList"
]);
这是我的商店:

var bannersStore  = Reflux.createStore({
  users: { data : {}},
  listenables: [Actions],

  init: function() {

    this.fetchList();

  },
  fetchList: function(){

    var self = this;

    reqwest({
      url: 'http://localhost:9080/api/member.json',
      method: 'get',
      success: function (resp) {
        console.log('fetch complete');
        self.users = resp;
        self.trigger({users :resp});

      }
    });
  }

});
这是我的课堂:

var Users = React.createClass({

    getInitialState: function() {
        return {users : UsersStore.fetchList()};
    },

    render: function() {

        var usersRows = this.state.users.data.map(function(user, i) {

              return (
                  <tr key={i}>
                      <td><Link to="user" params={{ id: user.id }}>{user.attributes.firstname + ' ' + user.attributes.lastname}</Link></td>
                      <td>{user.attributes.email}</td>
                      <td>{user.status}</td>
                      <td>{user.language}</td>
                  </tr>
              )
          });

          return (
              <div>
                  <table className="table table-striped">
                      <thead>
                      <tr>
                          <th>Name</th>
                          <th>Image</th>
                          <th>URL</th>
                          <th>Active?</th>
                      </tr>
                      </thead>
                      <tbody>
                      { usersRows }
                      </tbody>
                  </table>
              </div>
          )

        }

});
var Users=React.createClass({
getInitialState:函数(){
返回{users:UsersStore.fetchList()};
},
render:function(){
var usersRows=this.state.users.data.map(函数(user,i){
返回(
{user.attributes.firstname+''+user.attributes.lastname}
{user.attributes.email}
{user.status}
{user.language}
)
});
返回(
名称
形象
统一资源定位地址
活跃的?
{usersRows}
)
}
});
此.state.users.data
未找到,我有一个错误(未定义)


谢谢您的帮助。

您是否希望UI冻结,直到请求成功

这里发生的是异步执行请求。一旦成功,您的
success
回调将被触发,您可以在这里更新React组件

我不熟悉反流,所以可能有更好的方法,但我天真的方法是:

  • 在编写组件时,要考虑到第一次呈现时不会有数据,因此要使代码更安全

  • success
    回调中,使用新数据再次呈现组件


  • 但是,回流可能有一种我不知道的处理休息的内在方式。

    我建议采用这种模式。回流模式示例见React.14/ReFluxSuperAgent

    getInitialState:function(){
    返回{用户:{数据:[]};
    },
    componentDidMount(){
    this.unsubscribe=UsersStore.listen(this.storeDidChange);
    Actions.fetchList();
    },
    componentWillUnmount(){this.unsubscribe();},
    storeDidChange(新数据){
    此.setState(newData);
    },