重写一个函数,通过数组中匹配的id查找对象,更新值并设置反应状态



下面的函数接收对象内部的评级值。当ID或问题保持不变时,评分值可以更新。因此,应更新React状态值。有没有一种方法可以让这个函数看起来更漂亮/简洁,同时只使用一个普通的javascript。

ratingCompleted = ({ rating, question, id }) => {
let array = this.state.ratingResponses;
const index = array.findIndex(elem => elem.id == id);
if (index === -1) {
array.push({ rating, question, id });
this.setState({ ratingResponses: array });
} else {
array.map(object => {
if (object.id === id) {
object.rating = rating;
return object;
} else {
return object;
}
});
this.setState({ ratingResponses: array });
}
};

确保传播以阻止突变

这可以稍微干净一点,但我想我会展示每一步。

const array = [...this.state.ratingResponses]; // spread this so as to make a copy
let updatedArray;

const hasRatingAlready = array.some(item => item.id === id);
if (!hasRatingAlready) {
updatedArray = [...array, { rating, question, id }];
} else {
updatedArray = array.map(item => item.id === id ? {...item, rating} : item);
}
this.setState({ ratingResponses: updatedArray });

最新更新