反应回流createStore $ ajax触发器无法正常工作

时间:2017-09-14 18:13:47

标签: javascript jquery ajax reactjs refluxjs

您好我正在尝试使用触发器更新数据,但它无法正常工作我是新的反应和回流我的部分代码是:

import Reflux from 'reflux'
import $ from 'jquery'
import PeopleActions from  '../actions/PeopleActions.js'

let PeopleStore = Reflux.createStore({
    listenables: [PeopleActions],
    fetchPeople: function (){
        $.ajax({
            url: 'https://randomuser.me/api',
            dataType: 'json'
        })
        .done(function(peoples){
            let people = peoples.results
            this.trigger(people)
        })
    }
})

module.exports = PeopleStore

给我下一个错误:

PeopleStore.js?13fb:14 Uncaught TypeError: this.trigger is not a function
    at Object.eval (eval at <anonymous> (app.js:2617), <anonymous>:27:9)
    at fire (eval at <anonymous> (app.js:2623), <anonymous>:3317:31)
    at Object.fireWith [as resolveWith] (eval at <anonymous> (app.js:2623), <anonymous>:3447:7)
    at done (eval at <anonymous> (app.js:2623), <anonymous>:9272:14)
    at XMLHttpRequest.eval (eval at <anonymous> (app.js:2623), <anonymous>:9514:9)

2 个答案:

答案 0 :(得分:0)

你所拥有的是Store概念和Actions概念的奇怪组合。这些是通量流的两个相关但不同的方面。我建议找一个反流指南,并密切关注这些概念之间的区别。

具体来说,您的函数fetchPeople是一个操作,而不是一个处理程序。商店希望有一个名为onFetchPeople的不同方法,其定义与您所写的方法截然不同。

鉴于&#34;触发器&#34;的概念,您完全可以预料到错误。功能仅存在于操作而非存储。但除此之外,试图从内部触发行动并没有多大意义。

答案 1 :(得分:0)

你正在使用Reflux工作的旧方式。它应该是这样的:

export default class PeopleStore extend Reflux.Store {
    constructor() {
        super();
        this.listenables = PeopleActions;
    }

    fetchPeople() {
        $.ajax({
            url: 'https://randomuser.me/api',
            dataType: 'json'
        })
        .done((peoples) => {
            let people = peoples.results
            this.setState(people)
        })
}

触发PeopleActions.fetchPeople(),任何侦听PeopleActions的商店都会从商店内触发fetchPeopleonFetchPeople,具体取决于存在哪些功能。