【发布时间】:2021-02-06 11:51:52
【问题描述】:
我从一个包含练习列表的 api 中提取数据,这里是一个示例练习对象。
{
pivot_id:1,
id:1,
image_path: "exercise\/images\/q3YaO7uuFYgZDFg7fnVpn3eYxrb5oUZeKwE6mNf7.png",
name:"Smitham PLC",
duration:423,
duration_per_rep:5,
intensity:{
id:2,
intensity: "Moderate Resistance Training",
met_value:4.5
},
image:"https:\/\/s3-eu-west-1.amazonaws.com\/fitness-concierge\/exercise\/images\/q3YaO7uuFYgZDFg7fnVpn3eYxrb5oUZeKwE6mNf7.png",
kcal:5,
},
我创建了一个默认值为 60 的 customDuration 状态,我想通过使用按钮添加一个以 30 秒为增量的持续时间来将其添加到每个锻炼对象。但是,我在只更新一个特定项目时遇到了问题。
例如,我渲染了两个项目,当我按下 + 按钮为它所做的练习添加 30 秒时,它从 60 到 90 秒,但是当我去第二个添加一些时间时列表中的项目将从 60 到 120 出现问题。
addDuration(item, index) {
let newArray = [...this.state.warm_up_exercises];
newArray[index] = {
...newArray[index],
customDuration: this.state.customDuration = this.state.customDuration + 30,
storeValues: true,
workoutStoreType: 'duration',
};
this.setState({
warm_up_exercises: newArray,
});
}
上面是我用来为练习添加持续时间的函数,我尝试过 item.customDuration = item.customDuration + 30 但我只是在控制台中得到 NaN。
在我的映射函数中,我的自定义持续时间显示如下
<Text>{{ item.customDuration }}</Text>
我已经为此苦苦挣扎了几天,非常感谢您的帮助。我想要实现的只是做到这一点,因此当我将值添加到数组时,它将更新该项目并且对其他项目没有影响。
提供更多上下文的附加代码:
My constructor:
constructor(props) {
super(props) {
warm_up_exercises: [],
selected_warm_up_exercises: [],
repsValue: 0,
setsValue: 0,
restValue: 0,
workoutStoreType: "",
customDuration: 60,
}
}
Were I call the function:
<TouchableOpacity onPress={() => this.addDuration(item, index)}>
<AntDesign name="pluscircle" size={22} color={Colours.type.primary_colour} />
</TouchableOpacity>
【问题讨论】:
标签: arrays reactjs react-native mapping increment