ReactJS加载有状态数据,进行优化

时间:2016-03-01 21:24:28

标签: javascript python django reactjs django-rest-framework

我是ReactJS的新手并将其与Django Rest Framework(DRF)一起使用

def MyModel(model):
    ...
    status = ChoiceField(['new', 'in progress', 'completed'...])

在我的应用中,我为每个州都有单独的部分。所以数据需要分开。 我的问题是有很多不同的州,大约6或7个。

所以我为每个状态使用不同的路线。 / new,/ inprogress等。但这导致每次大约7个请求而不是1个。

loadMymodelsFromServer: function () {
    this.loadNewMymodelsFromServer();
    this.loadAssignedMymodelsFromServer();
    this.loadAllocatedMymodelsFromServer();
    this.loadDraftMymodelsFromServer();
    this.loadPublishedMymodelsFromServer();
    this.loadArchivedMymodelsFromServer()
    this.loadSponsoredMymodelsFromServer();
    this.loadCurrentUserMymodelsFromServer();
},

loadNewMymodelsFromServer: function() {
    var url = this.props.url + "/new/";
    $.ajax({
        url: url,
        dataType: 'json',
        cache: false,
        success: (function (data) {
            this.setState({ new_mymodels: data });
        }).bind(this),
        error: (function (xhr, status, err) {
            console.error(url, status, err.toString());
        }).bind(this)
    });
},

数据必须刷新几次,例如删除操作和更新操作,因为JS数组不能很好地支持这些操作。

在一个巨大的请求中加载未排序的所有数据并在JS for循环中对其进行排序会更好吗?

感觉不对,因为我知道数据库已经过优化以查询这样的参数,而不是Javascript,所以我做错了什么?

1 个答案:

答案 0 :(得分:1)

您可以只进行一次ajax调用,将所有7个结果作为单个对象返回,而不是进行7次单独的ajax调用。

新的ajax调用的服务器处理程序只需调用其他7个查询并将结果收集到单个对象中。

这里有一些服务器的伪代码:

function megaQueryHandler() {
    var result = {
       query1Data: query1Handler(),
       query2Data: query2Handler(),
       ...
    };

    return result;
}

然后,您的客户只需拨打一次#34; mega query"。