Javascript 分解分配与array.map
我是ReactJs的新手,对这两种方法有疑问: 1: 2: 问题1:这两种方法都很好地切换并正常工作,但我想知道是否有任何优势 问题2:第二种方法中这一行的目的是什么:Javascript 分解分配与array.map,javascript,reactjs,Javascript,Reactjs,我是ReactJs的新手,对这两种方法有疑问: 1: 2: 问题1:这两种方法都很好地切换并正常工作,但我想知道是否有任何优势 问题2:第二种方法中这一行的目的是什么: movies[index] = { ...movies[index] }; 不要使用#1,至少不要使用它的书写方式。您正在改变旧状态,这很容易导致react中的错误,因为react假定该状态是不可变的。您确实创建了一个新数组,这很好,但是您没有在数组中创建新元素。如果要更改阵列中的一个对象,则需要在修改该对象之前复制该对象
movies[index] = { ...movies[index] };
不要使用#1,至少不要使用它的书写方式。您正在改变旧状态,这很容易导致react中的错误,因为react假定该状态是不可变的。您确实创建了一个新数组,这很好,但是您没有在数组中创建新元素。如果要更改阵列中的一个对象,则需要在修改该对象之前复制该对象
更好的方法是:
handleLike = movie => {
const movies = this.state.movies.map(m => {
if (m._id === movie._id) {
const copy = { ...m };
copy.liked = !m.liked;
return copy;
}
return m;
});
this.setState({ movies });
};
这也是你关于#2的问题:
问题2:第二种方法中这一行的目的是什么:
movies[index]={…movies[index]}代码>
这样做的目的是复制这部电影。这使您可以在不修改旧状态的情况下更改副本
问题1:这两种方法都很好地切换并正常工作,但我想知道是否有任何优势
如果你在#1中修复了突变问题,那么这几乎是一个偏好问题。不要使用#1,至少不要使用它的书写方式。您正在改变旧状态,这很容易导致react中的错误,因为react假定该状态是不可变的。您确实创建了一个新数组,这很好,但是您没有在数组中创建新元素。如果要更改阵列中的一个对象,则需要在修改该对象之前复制该对象
更好的方法是:
handleLike = movie => {
const movies = this.state.movies.map(m => {
if (m._id === movie._id) {
const copy = { ...m };
copy.liked = !m.liked;
return copy;
}
return m;
});
this.setState({ movies });
};
这也是你关于#2的问题:
问题2:第二种方法中这一行的目的是什么:
movies[index]={…movies[index]}代码>
这样做的目的是复制这部电影。这使您可以在不修改旧状态的情况下更改副本
问题1:这两种方法都很好地切换并正常工作,但我想知道是否有任何优势
如果你在#1中解决了突变问题,那么这几乎是一个偏好问题
handleLike = movie => {
const movies = this.state.movies.map(m => {
if (m._id === movie._id) {
const copy = { ...m };
copy.liked = !m.liked;
return copy;
}
return m;
});
this.setState({ movies });
};