【发布时间】:2015-12-28 13:32:07
【问题描述】:
更新: 这个问题似乎与猫鼬有关。请参阅底部的更新。
在父级中,我使用以下代码将choosenItem 传递给孙子:
childContextTypes: {
foo: React.PropTypes.object.isRequired,
},
getChildContext: function() {
return { foo: this.state.choosenDriver }
},
choosenDriver 是一个mongoose 模型,如下所示:
var Schema = mongoose.Schema;
var driverSchema = new mongoose.Schema({
driver: String,
age: String,
cars: [{ type: Schema.Types.ObjectId, ref: 'Car' }]
});
module.exports = mongoose.model('Driver', driverSchema);
这很好用,在 GrandChild 中我可以执行以下操作:
contextTypes: {
foo: React.PropTypes.object.isRequired,
},
//some other stuff...
render: function(){
return (
<h1>{this.context.foo.name}</h1>
)
});
这会显示choosenDriver 的名称。
我也想循环通过汽车,并认为可以这样做:
render: function(){
var cars = new Array(this.context.foo.cars);
var driversCars = cars.map(function(car,i){
return <li key={i}> {car} </li>;
});
return (
<div>
<h1>{this.context.foo.name}</h1>
<ul>{driversCars}</ul>
</div>
)
}
});
这会在一行显示的字符串中返回所有司机汽车。 我查看了反应开发者工具,发现汽车没有定义为数组。
这可能是因为choosenDriver 是state 并且不支持这种方式的数组吗?
汽车显然是存在的,但不是作为数组存在的。
关于如何在这个例子中以数组的形式访问汽车有什么想法吗?
谢谢!
更新:
在 react-Tools 中查看 this.context.foo.cars 时,我看到:
cars:
->_proto_ :{..}
0: "4242594395935934",
1: "3543435095340509"
etc...
cars should be an Array so I would expect to see:
cars: Array[4]
尽管在数据库中一切看起来都应该:
"cars":["5607b0747eb3eefc225aed61","5607b07a7eb3eefc225aed62","5606bf4b0e76916c1d1668b4","5607b07a7eb3eefc225aed62"]}]
最后更新: 在这里他们彼此相邻我反应工具: (我有一个驱动程序列表,这表明驱动程序对象在被选中时会发生变化)
State:
choosenDriver: {..}
_v:0
_id: "235345353453"
name: "Roger"
cars:
->_proto_ :{..}
0: "4242594395935934",
_id: undefined
Same driver but not choosen:
drivers: array[3]
->0: {}
->1: {}
_v: 0
_id: "4242594395935934"
cars: Array[1]
因此,当数组被选中时,它会发生一些事情。奇怪...
【问题讨论】:
-
React 对象可以毫无问题地处理处于其状态的数组,也许你可以在这个问题中添加 moongose 标签,我很确定问题就在那里。
-
您的意思是
cars不是数组还是this.context.foo.cars不是数组?
标签: javascript arrays mongoose reactjs