我处于这种状态:
state = {
formdata:{
name: null,
about: null,
price: null,
offerPrice:null,
playStoreUrl:null,
appStoreUrl:null ,
photo:null,
}
}
我想要的:模态内部的更新表单我用它来更新产品。我在componentWillReceiveProps
内使用了新道具
我做到了:
componentWillReceiveProps(nextProps){
let Updateproduct = nextProps.productlist.productlist.Products;
Updateproduct.map((item,i) => {
let formdata = Object.assign({}, this.state.formdata);
formdata.name = item.name
formdata.about = item.about
formdata.price = item.price
formdata.offerPrice = item.offerPrice
formdata.playStoreUrl = item.playStoreUrl
formdata.appStoreUrl = item.appStoreUrl
formdata.photo = item.photo
console.log(formdata)
this.setState({formdata})
})
}
MyProblem::这填充了对象,但仅以模态内部的形式,当单击以更新任何产品时,我看到的不是模态中的最后一个产品。 注意: Updateproduct
包含:
{
about: "about product1"
appStoreUrl: "https://itunes.apple.com/us/app/snapchat/id447188370?mt=8"
name: "p1"
offerPrice: 99.99
photo: "images/products/"
playStoreUrl: "images/products/"
price: 1000
}
{
about: "about product2"
appStoreUrl: "https://itunes.apple.com/us/app/snapchat/id447188370?mt=8"
name: "p2"
offerPrice: 99.99
photo: "images/products/"
playStoreUrl: "images/products/"
price: 2000
}
答案 0 :(得分:1)
问题是,您希望将用户单击的单个特定产品项存储在状态变量中,但是使用当前代码,您始终将存储最后一个产品项。同样,setState循环不是一个好方法。
要解决此问题,请仅在onClick处理程序函数内部而不是componentWillReceiveProps
方法中以状态存储单击的产品详细信息。为此,您需要将产品ID与onClick函数绑定。
赞:
onClick={this.getProductId.bind(this, item.id)}
// click handler function
getProductId = (id) => {
let productObj = {};
let Updateproduct = this.props.productlist.productlist.Products;
Updateproduct.forEach((item,i) => {
if(item.id == id) {
productObj = {
name: item.name,
about: item.about,
price: item.price,
offerPrice: item.offerPrice,
playStoreUrl: item.playStoreUrl,
appStoreUrl: item.appStoreUrl,
photo: item.photo
};
this.setState({ formdata: productObj, id: id })
}
})
}
答案 1 :(得分:0)
I think that's because your setState() call is in the wrong place (and only one object at a time):
let data =[];
UpdateProduct.map((item, i) => {
let formdata = null;
// do your formdata stuff but append it as part of an array
data.push(formdata);
});
this.setState({ formdata: data });
Then I think it should get all the products.
答案 2 :(得分:0)
您正在地图内设置状态。如果您将地图视为一个循环,则意味着每次迭代都将其覆盖。因此,您只会显示最后一个。