reactjs - 从具有 3 个对象的组件从子级传递到父级
问题描述
我有一个带有 2 个按钮和 1 个输入文本的组件。按钮 1 减少一个项目,而按钮 2 增加一个项目到输入。当我减少/增加一个项目时,我需要从输入中获取值。减少/增加它的工作,但我不能(我不知道如何)获得父组件中的值。这是我的子组件,名为 ChooseQuantity:
import React, { Component } from 'react';
import './ChooseQuantity.css';
class ChooseQuantity extends Component{
constructor(props){
super(props);
}
state = {
qtd: 0,
}
addItem(){
this.setState({qtd: this.state.qtd + 1 });
}
removeItem(){
if(this.state.qtd > 0){
this.setState({qtd: this.state.qtd - 1 });
}
}
render() {
return(
<div>
<button className="minus" onClick={() => this.removeItem()}>
<i className="fas fa-minus"></i>
</button>
<input className="qtd" type="text" value={this.state.qtd} name='qtd' onChange={this.props.action} onInput={(e) => this.setState({ choose_quantity: e.target.value })} readOnly />
<button className='plus' onClick={() => this.addItem()} >
<i className="fas fa-plus"></i>
</button>
</div>
)
}
}
export default ChooseQuantity;
这是我的父组件的一部分,名为 Event(请注意,它位于数组中的子组件):
{
this.state.tickets.map((ticket, i) => (
<div key={i}>
<div className="row">
<div className="col">
<h3 className="ticket-name">{ ticket.name }</h3>
</div>
</div>
{ticket.lot.map((lot, j) =>
<div className="row" key={i}>
<div className="col-8">
<h5 className="lot-name">{ lot.name }</h5>
<h6 className="lot-price">
R$ { lot.price.replace('.', ',') } <br />
<small>(R$ { lot.price.replace('.', ',') } + R$ { lot.price_tax.replace('.', ',') })</small>
</h6>
</div>
<div className="col-4">
<ChooseQuantity />
{this.state.qtd}
</div>
</div>
)}
<hr />
</div>
)
)
}
解决方案
您应该将状态“提升”到一个共同的父级,该父级处理逻辑并传递处理程序,如onAddItem
,onRemoveItem
以及value
向下的按钮和输入的道具。
有关提升状态的详细信息,请参见此处:https ://reactjs.org/docs/lifting-state-up.html
推荐阅读
- javascript - 在单击 d3 js 条形图上滚动条
- java - 运行插入样本时出现问题
- angular - 在 angualr 6 中使用 sharedObject 服务的最佳方式是什么?
- dart - 在选择和自定义瓷砖高度时更改 ListTile 的背景颜色
- android - 调用 HttpUrlConnection.getResponseCode() 时 IntentService 冻结
- javascript - ESLint 警告(应该使用非回调方法) - 如何处理?
- amazon-s3 - Vagrant:来自 S3 的下载框(使用 MFA)
- c# - RetrieveEntityChangesRequest 附件
- sql - 想简化oracle sql中的REGEXP_SUBSTR()
- c - 大小不会增加,但它会存储更大的数据。这怎么可能?