gpt4 book ai didi

javascript - 如何使用 ReactJS 显示动态表上每一行的价格?

转载 作者:行者123 更新时间:2023-11-30 20:15:56 26 4
gpt4 key购买 nike

我有一个动态表,对于每一行,我希望在选择产品名称后显示价格,当我输入数量时,也将显示总计(价格*数量)列。

我的问题是,当我为任何行选择产品名称时,表格上的每一行都会显示相同的价格,而且当我想要总显示时,它总是有 NaN,如下图所示:

enter image description here

我的代码:

class AjouterFacture extends Component {
constructor(props) {
super(props);
this.state = {

rowData: [],

Produits: [],
QuantiteF: "",
Prix: [],
id: 0,


};
this.handleSubmit = this.handleSubmit.bind(this);
this.handleRowDelete = this.handleRowDelete.bind(this);
this.handleRowAdd = this.handleRowAdd.bind(this);

this.handleselectChange = this.handleselectChange.bind(this);
this.PrixDisplay = this.PrixDisplay.bind(this);
}
componentWillReceiveProps(nextProps) {
console.log("nextProps", nextProps);
}
componentDidMount() {

axios({
method: "get",
url: "/app/getNomprod/",
withCredentials: true,
}).then(response => {
if (response && response.data) {
this.setState({
Produits: response.data
});
}
}).catch(error => console.log(error));
}

handleQuantiteChange(index, value) {
const rowDataCopy = this.state.rowData.slice(0);
rowDataCopy[index] = Object.assign({}, rowDataCopy[index], {
QuantiteF: parseInt(value, 10)
});
this.setState({
rowData: rowDataCopy
});
}

handleselectprdtChange(index, value) {
const rowDataCopy = this.state.rowData.slice(0);
rowDataCopy[index] = Object.assign({}, rowDataCopy[index], {
selectprdt: value
});
this.setState({
rowData: rowDataCopy,
});

render() {

let {
Clients
} = this.state.Clients;
var Cd = {
pointerEvents: 'none'
}
let {
Produits
} = this.state;
let {
rowData
} = this.state.rowData;
let {
Prix
} = this.state.Prix;

return (<div className="animated fadeIn">


<h6> <Label ><strong>Veuillez ajouter au moins un produit : </strong></Label></h6>
<Table responsive style={items} >
<thead style={back}>
<tr>
<th>PRODUIT</th>
<th>QUANTITE</th>
<th>PRIX UNITAIRE</th>
<th>TOTAL</th>
<th></th>
</tr>
</thead>
<tbody>
{this.state.rowData.map((data, index) => (
<tr key={index} id={index}>
<td>
{" "} <Input type="select" name="selectprdt" id="selectprdt"
placeholder="Veuillez sélectionner un produit" value={data.selectprdt}
onChange={(e) => this.handleselectprdtChange(index, e.target.value)} >
<option key={-1} hidden>Choisisr un produit</option>


{ this.state.Produits.map((pdt, i) =>
<option key={i}>{pdt.Nomp}</option>


)}


</Input>
</td>
<td><Input type="number"
value={data.QuantiteF || 0} onChange={(e) => this.handleQuantiteChange(index, e.target.value)}/></td>
<td>


{ this.state.Prix.map(pr =>
<p key={index} >{pr.PrixV} </p>
)}

</td>

<td >


<p key={index} className='pa2 mr2 f6'>{(data.QuantiteF || 0) * (parseInt(this.PrixDisplay(data.selectprdt)|| 0))} </p>



</td>
<td>
<Button onClick={(e) => this.handleRowDelete(index)} active style={center} size="sm" color="danger" className="btn-pill" aria-pressed="true">Effacer</Button>
</td>{" "}
</tr>
))}



<tr>

<td/>
<td/>
<td/>
<td/>
<td><Button onClick={this.handleRowAdd} active style={center} size="sm" color="info" className="btn-pill" aria-pressed="true">Ajouter une ligne</Button></td>
</tr>
</tbody>



</Table>


</div>
);
}
PrixDisplay(selectprdt) {
return axios.get("/app/getPrixprod/" + selectprdt).then(response => {
if (response && response.data) {
this.setState({
Prix: response.data
});
}
}).catch(error => {
console.error(error);
});
}

handleRowDelete(row) {
const rowDataCopy = this.state.rowData.slice(0);
rowDataCopy.splice(row, 1);
this.setState({
rowData: rowDataCopy
});
}
handleRowAdd() {
let id = this.state.id;
id = id++;
const rowDataCopy = this.state.rowData.slice(0);
rowDataCopy.push({
selectprdt: "",
QuantiteF: 0,
Prix: ""
});
this.setState({
rowData: rowDataCopy,
id: id
});
}
}
export default AjouterFacture;

请问我该如何解决?

最佳答案

  1. 关于显示价格。您没有节省价格(连接)。而是在 PrixDisplay 中重置它。所以在 state.Prix 里面你只有一个值。您可能需要解析为 state.rowData[i].Prix。并在渲染中实际显示它。完全删除 state.Prix。
  2. 关于 NaN。因为您的 PrixDisplay 函数返回 Promise 它无法被解析。所以南。了解第一个问题和解决方案。第二个会随之而来。

另外,作为建议,请查看Array 的map、filter 方法并尝试重构。它将使您的代码更加愉快和简洁。

关于javascript - 如何使用 ReactJS 显示动态表上每一行的价格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51919502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com