回流listenAndPromise做多次动作

时间:2015-11-08 03:25:12

标签: reactjs refluxjs

我在回流行动中有一些行动,这是我的行动

var BeritaActions = Reflux.createActions({
  'getListBerita': {
    children: [
      'actions', 'completed', 'failed'
    ]
  },
  'getBerita': {
    children: [
      'actions', 'completed', 'failed'
    ]
  },
});

BeritaActions.getListBerita.listen(function(param)
{
  return BeritaUtil.listBerita(param)
    .on('error', this.failed)
    .end(this.completed);
});

BeritaActions.getBerita.listenAndPromise(function(id)
{
  return BeritaUtil.read(id)
    .on('error', this.failed)
    .end(this.completed);
});

这是我的商店,并听取行动

Reflux.createStore({
  onprogress: false,
  type: null,
  init()
  {
    this.listenTo(BeritaAct.getListBerita.completed, this.getInitData);
    this.listenTo(BeritaAct.getListBerita.failed, this.getInitErrorData);
  },
  setType(type)
  {
    return this.type = type;
  },
  getCurrentData()
  {
    return _data;
  },
  getInitData(field)
  {
    console.log(field)
    let data = JSON.parse(field.text);
    if(data.meta.code == 200)
    {
      if(typeof _data[this.type] == 'undefined')//first open
      {
        //console.log('first')
        _data[this.type] = data.data;
      }else//on load more = merging data
      {
        //console.log(_data[this.type])
        _data[this.type] = update(_data[this.type], {$merge: data.data}); 
      }

      this.trigger(_data);

    }else
    {
      Toas.error({title:data.meta.message, content:''});
    }
  },...

所以我在我的组件中执行操作

React.createClass({
  getInitialState()
  {
    if(Progress.isAjax())
    {
      Progress.onProgress(true);
      BeritaStore.setType('list');
      BeritaAct.getListBerita({});
    }else
    {
      //not ajax
    }
    return {
      showloader: {display: 'none'},
      shownext: {display: 'block'}
    };
  },..

存储可以很好地监听操作,并且可以返回我的react组件。但是当我检查网络检查时,我多次得到了行动请求,我不知道发生了什么?

request many times

1 个答案:

答案 0 :(得分:0)

好的家伙我解决了这个问题,让我们去getInitData函数

getInitData(bind, field)
{
    console.log(field)
}

我在getInitData函数上添加参数,所以在i console.log()秒参数后,我得到了数据