Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 反应+;主干应用程序由1个职位改为2个职位_Javascript_Rest_Backbone.js_Express_Reactjs - Fatal编程技术网

Javascript 反应+;主干应用程序由1个职位改为2个职位

Javascript 反应+;主干应用程序由1个职位改为2个职位,javascript,rest,backbone.js,express,reactjs,Javascript,Rest,Backbone.js,Express,Reactjs,我有一个用React和Backbone实现的restfultodo列表 现在,我不是在和数据库说话;只需要一个数组var mytodos=[]在my server.js中。 以下是POST的服务器代码(使用Express): 当我向列表中添加一个项目时,我看到出于某种原因发布了两篇帖子 POST: {"id":0,"title":"test","completed":false} POST: {"id":1,"title":"test","completed":false} 在Chrome开发

我有一个用React和Backbone实现的restfultodo列表

现在,我不是在和数据库说话;只需要一个数组
var mytodos=[]在my server.js中。
以下是POST的服务器代码(使用Express):

当我向列表中添加一个项目时,我看到出于某种原因发布了两篇帖子

POST: {"id":0,"title":"test","completed":false}
POST: {"id":1,"title":"test","completed":false}
在Chrome开发模式下,我看到:

PUT localhost/todos/0 404 (Not Found)
PUT localhost/todos/1 404 (Not Found)
两个PUT请求


试图通过它进行推理-
save()
被调用,它调用
sync()
。由于模型还没有
id
(仅
cid
),因此它会发出POST请求,并将todo(id=0)添加到
myTODO
,然后更新客户端上的模型(添加
id
属性)。由于检测到更改,它会执行另一个
save()
,将其放到服务器上(I通过将
create
更改为
add

更具体地说,某个事件触发了一个
主干.Collection.create
调用,该调用根据与服务器的同步进行

在React代码中,我有一个
componentDidUpdate
,它调用
Backbone.Model.save
,并尝试发送到服务器


因为该事件导致执行
create
save
,POST被触发了两次。

我们也遇到过类似的问题,并且对于我们来说,如果视图(或任何对象)被初始化两次(或不止一次),就会出现双服务器请求问题。您可以将调试器放在chrome中,查看它是否被命中两次。如果您在更高级别初始化对象(如在模块中)是否在子视图中重新创建对象?我认为您需要显示触发帖子的React组件,服务器代码不是问题所在。Woops-看起来我不小心删除了这篇帖子的后半部分。已更新。
PUT localhost/todos/0 404 (Not Found)
PUT localhost/todos/1 404 (Not Found)
componentDidUpdate: function() {
    this.props.todos.forEach(function(todo) {
        console.log('componentDidUpdate: ' + todo.id); // logs: undefined, 0, 1
        todo.save();
    });
},
...
save: function(todo, text) {
    console.log('Save: ' + todo.id); // only logged on update
    todo.save({title: text});
    this.setState({editing: null});
},
...
}