繁体   English   中英

猫鼬,对象数组

[英]Mongoose, array in object

更新:此问题似乎与猫鼬有关。 请参阅底部的更新。

在父级中,我使用以下代码将choosenItem传递给grandChild:

childContextTypes: {
        foo: React.PropTypes.object.isRequired,
         },

   getChildContext: function() {
        return { foo: this.state.choosenDriver }
   },

choicenDriver是一个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>

  )
}

 });

这将以一行显示在一个字符串中返回所有驾驶员汽车。 我查看了React开发人员工具,发现没有将car定义为Array。

这是否可能是因为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]

尽管在数据库中,everythingg看起来应该像这样:

"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]

因此,当数组被选中时会发生一些事情。 奇怪的...

如果您的意思是cars不是您期望的Array(而不是this.context.foo.cars )...

Array构造函数使用返回的数组中的元素作为构造函数的每个参数来构建一个数组。

因此, new Array([1,2,3])给您: [[1,2,3]]

您需要Array.from([1,2,3]) ,它将为您提供[1,2,3] ,这似乎是您想要的。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array

但是对于您的代码,为什么不能跳过创建中间数组而直接调用this.context.foo.cars.map(...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM