在做购物车功能,我是把商品列表拆成FlatList遍历的。现在的问题是,点击加减号都会调用后台接口 改变当前商品购物车数量,可是用了FlatList,state取值 ,改变一个商品的数量,页面所有的数量都会变,如果不用state,在页面看不到数量的变化。可能描述的有点混乱,下面是截图的代码。
//这是数量加减的方法。
itemIncrease = (i,id,item) => {
console.log(item)
i++;
this.changeNumberData(id,i)
};
itemReduce = (i,id,item) => {
if (i <= 1) {
return;
}
i--;
// this.setState({ selNum : i },()=>{ //这里如果设置state的值,那么只要改变一个商品数量,页面所有商品的数量都会是相同的,刷新页面之后才会正常。
item.number = i;
this.changeNumberData(id,i)
// });
};
//商品的FlatList,item是每个商品的json
_renderGoods(item){
return(
<FlatList data={item.goodsList}
renderItem={({ item}) => this._renderGoodsView(item)}
keyExtractor1={ this.keyExtractor1 }
extraData={this.state}
/>
)
}
//这是商品的view,我只取了数量那里的代码
_renderGoodsView(item){
return(
<View style={styles.moneyWrapRight}>
<TouchableOpacity style={ [styles.reduceNum,{ backgroundColor : item.number <= 1 ? '#dcdcdc' : '#20a200' }] }
onPress={() => this.itemReduce(item.number,item.id,item)}>
<Text style={[styles.numText,{color:"#fff"}] }>-</Text>
</TouchableOpacity>
<View style={ styles.numTextWrap }>
<Input style={styles.selNumText}
value={ `${ item.number }`} keyboardType='numeric' maxLength={3}
onChangeText={(text) => this.setState({selNum:this._text(text)})} />
</View>
<TouchableOpacity style={ [styles.reduceNum,{backgroundColor:"#20a200"}] }
onPress={() => this.itemIncrease(item.number,item.id,item)}>
<Text style={[styles.numText,{color:"#fff"}] }>+</Text>
</TouchableOpacity>
</View>
)
}