如何在对象数组中循环数组

时间:2016-09-26 23:55:47

标签: javascript arrays loops object reactjs

我知道如何在内部运行循环反应,但是我如何在一个已经在循环数组中的对象内进行呢?

我正在尝试将每个成分项目显示为<li>,到目前为止,我已经使用了配方,但我迷失了成分。如果有人可以插话,我会很感激。

var Recipes = React.createClass({
// hook up data model
  getInitialState: function() {
    return {
      recipeList: [
        {recipe: 'Cookies', ingredients: ['Flour ', 'Chocolate']},
        {recipe: 'Cake', ingredients: ['Flour ', 'Sprinkles']},
        {recipe: 'Onion Pie', ingredients: ['Onion ', 'Pie-Crust']}
      ]
    }
  },

  loop: function() {
    {this.state.recipeList.flatMap('ingredients').map(item, index) => (
      <li key={index} className="list-group-item">{ingredient.ingredients}</li>
    )}
  },

  render: function() {
    return (
      <div>
        {this.state.recipeList.map((item, index) => (
          <div className="panel panel-default">
            <div className="panel-heading"><h3 className="panel-title">{item.recipe}</h3></div>
            <div className="panel-body">
              <ul className="list-group">
              {this.loop}
              </ul>
            </div>
          </div>
          )
        )}
      </div>
    );
  }
});

2 个答案:

答案 0 :(得分:3)

这样怎么样:

  loop: function(ingredients) {
   return ingredients.map((ingredient, index) => {
    return (<li key={index} className="list-group-item">{ingredient}</li>)
   })
  },

  render(){
      ...
        {this.loop(item.ingredients)}
      ...
  }

还有一件事,你不应该将数组索引用作key,因为以后编辑数组时很难管理。最好为key分配一些非常独特的内容,例如idindex + Date.now()

答案 1 :(得分:0)

您似乎错过了return方法中的loop语句。

你可以像你希望的那样深度级联渲染,只记得你需要调用方法而不是仅仅将它放在组件结构中(参见样本中没有调用括号的this.loop):

var myComponent = React.createClass({
  renderListElements: function (parent) {
    return this.state.listElements[parent].map((element, index) => (
      <li 
        className="my-component__sub-component__list-element" 
        key={`${parent.uid}_${element.uid}`}
      >
        {element.name}
      </li>
    ));
  },

  render: function () {
    var parentsId = [ 0, 1, 2, 3 ];

    return (
      <div className="my-component">
        {parentsId.map((item, index) => (
          <div 
            className="my-component__sub-component" 
            key={item.uid}
          >
            {this.renderListElements(item)}
          </div>
        )}
      <div/>
    );
  }
});