Вам нужно только отключить одну кнопку за раз?Если это так, измените свое состояние, чтобы оно было не логическим, а числом, указывающим, какая кнопка отключена.Затем в режиме рендеринга отключите, только если отображаемая кнопка имеет тот же индекс, что и в состоянии.
this.state = {
disabledButton: -1
// ...
}
// ...
AddToCart(index, param, e) {
//...
this.setState({
inCart: true,
disabledButton: index
})
}
// ...
{this.state.spareParts.map((part, index) => {
// ...
<button onClick={() => this.AddToCart(index, part.SparePartID)}
disabled={this.state.disabledButton === index}>
{!this.state.inCart ? ("Add to Cart") : "Already in Cart"}
</button>
})}
Если вместо этого каждая кнопка должна быть отключена независимо, измените свое состояние набыть массивом логических значений той же длины, что и запасные части, и в методе рендеринга каждая кнопка должна искать, должна ли она быть отключена в этом массиве.
this.state = {
spareParts: [],
disabledButtons: [],
// ...
}
// ...
axios.get('http://localhost/Auth/api/customers/all_parts.php', {
headers: {
'Accept': 'application/json, text/plain, */*',
'Content-Type': 'application/json'
}} )
.then(response =>{
this.setState({
spareParts: response.data.records,
disabledButtons: new Array(response.data.records.length).fill(false)
});
});
// ...
AddToCart(index, param, e) {
//...
this.setState(oldState => {
const newDisabledButtons = [...oldState.disabledButtons];
newDisabledButtons[index] = true;
return {
inCart: true,
disabledButtons: newDisabledButtons,
}
});
}
// ...
{this.state.spareParts.map((part, index) => {
// ...
<button onClick={() => this.AddToCart(index, part.SparePartID)}
disabled={this.state.disabledButtons[index]>
{!this.state.inCart ? ("Add to Cart") : "Already in Cart"}
</button>
})}