javascript - 循环 div 并将其作为单独的组件和循环有什么区别?
问题描述
我需要知道这段代码有什么区别
{this.state.products &&
this.state.products.map((product, index) => (
<div key={index}>
<Subd
name={product.name}
price={product.price}
info={product.info}
image={product.image}
handleShow={this.showProduct}
handleTotal={this.calculateTotal}
/>
</div>
))}
并在组件内部循环div,<Sudb/>
例如
this.state.products &&
this.state.products.map((product, index) => (
<div className="row form-group">
<div className="col-sm-2">
<img
className="card-img-right flex-auto d-none d-lg-block"
alt="Thumbnail+{index}"
src={product.image}
/>
</div>
<div className="col-sm-6">
<h4>
{product.name}: ${product.price}
</h4>
<button className="btn btn-outline-primary" onClick={this.showInfo}>
show info
</button>
</div>
<div className="col-sm-4 text-right">
qty: {this.state.qty}
<br />
<button className="btn btn-outline-primary" onClick={this.add}>
{" "}
+1{" "}
</button>
<button
className="btn btn-outline-primary"
onClick={this.subtract}
disabled={this.state.qty < 1}
>
{" "}
-1{" "}
</button>
</div>
</div>`
在上述情况下,如果我更新影响所有三个对象的数量,但在第一种情况下它工作正常。谁能解释两者之间的确切区别是什么?沙盒链接沙盒
在第二个代码中我<Subd/>
直接制作了组件代码
解决方案
从我在提供的第二个示例提供的代码示例中可以看到的问题如下。
您对所有产品使用相同的状态。因此,当您为一行更新 this.state.qty 时,它会同时更新所有这些。
当你分开它时它确实起作用的原因是因为每一行都有自己的状态,你可以在其中存储单独的数量。
如果您确实觉得不需要分离该代码,您可以为每个数量创建一个状态数组。并更改减法以接受一个索引,该索引可用于访问 qty 状态数组上的特定行 qty 状态。
要将参数传递给 onclick,您必须将其包装在箭头函数中,这样当页面像这样安装时它不会自动运行
onClick={() => {someFunction(param)}
推荐阅读
- amazon-web-services - Tcp 级别 Ec2 上的信息
- c# - 如果只有一个孩子,则不会删除孩子的组件
- javascript - 重新格式化对象以使其更浅
- python - PEP484 打字——如何用 NoReturn 类型注释 Callable?
- javascript - Lit-Element 绑定到 svg 图像。TypeError:无法读取 null 的属性“拆分”
- javascript - 产品标签在 Shopify 商店中不起作用
- scala - 使用 CassandraSQLContext 从 Spark 查询 Cassandra
- java - 在 Eureka Server 中,发现和注册不是在 Spring 中开发的服务/应用程序
- c - 将 int 值保存到 EEprom 并再次将其加载回一个值
- ios - 在 UIStoryboard 之间来回切换