从刀片

时间:2018-04-20 22:02:14

标签: javascript php reactjs loops laravel-blade

我在Laravel项目中使用React js作为前端。从控制器,我将数组传递给我的视图:

return view('shopCart')->with('items',$it);

现在在视图中,a可以循环遍历数组:

@foreach($items as $item)
                <li><input type="checkbox" name=""> <span>{{$item->Name}}</span> <span></span>  <span>{{$item->Cost}}</span> </li>
@endforeach

这很好用。但我想让视图更具动态性(顺便说一下,这是购物车中的产品列表)。例如,默认情况下,将检查所有复选框,这意味着用户正在购买所有项目。我希望如果用户取消选中一个框,则总价格会发生变化。所以我创建了一个React组件,并通过props将$ items数组传递给该组件:

<div id="listshops" datas={{$items}}></div>

还有组件:

class Items extends Component {
    render() {


        return (
            <div className="container">
               <a href="/products">Continue shopping</a>
               //LOOP THROUGH THE ARRAY OF PRODUCTS
            </div>
        );
    }
}

export default Items;


window.onload=function(){
if (document.getElementById('listshops')) {
    var data=document.getElementById('listshops').getAttribute("datas");
    ReactDOM.render(<Items items={data}/>, document.getElementById('listshops'));
}

}

我如何遍历传递给组件的数组,以便我可以像刀片中的@foreach一样显示产品?

1 个答案:

答案 0 :(得分:1)

Array#map,不要“循环”。您将一个数据集(您的产品)映射到另一个相同大小的数据集(React组件)

const { items } = this.props;

return (
  <div className="container">
    <a href="/products">Continue shopping</a>
    {items.map(({ Name, Cost }) => <li key={Name}>
      <input type="checkbox" name="" /> <span>{Name}</span> <span></span>  <span>{Cost}</span>
    </li>)}
  </div>
);

通常当你map时,这是一个很好的迹象,表明你正在使用一个可以重复使用的组件。这可能是一种更清洁的方法:

const Product = ({ Name, Cost }) => (
  <li>
    <input type="checkbox" name="" />
    <span>{Name}</span>
    <span></span>
    <span>{Cost}</span>
  </li>
);

然后在你的渲染中:

const { items } = this.props;

return (
  <div className="container">
    <a href="/products">Continue shopping</a>
    {items.map(({ Name, Cost }) => <Product {...{Name, Cost}}/>}
  </div>
);