Javascript 分解分配与array.map

Javascript 分解分配与array.map,javascript,reactjs,Javascript,Reactjs,我是ReactJs的新手,对这两种方法有疑问: 1: 2: 问题1:这两种方法都很好地切换并正常工作,但我想知道是否有任何优势 问题2:第二种方法中这一行的目的是什么: movies[index] = { ...movies[index] }; 不要使用#1,至少不要使用它的书写方式。您正在改变旧状态,这很容易导致react中的错误,因为react假定该状态是不可变的。您确实创建了一个新数组,这很好,但是您没有在数组中创建新元素。如果要更改阵列中的一个对象,则需要在修改该对象之前复制该对象

我是ReactJs的新手,对这两种方法有疑问:

1:

2:

问题1:这两种方法都很好地切换并正常工作,但我想知道是否有任何优势

问题2:第二种方法中这一行的目的是什么:

  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 });
};