我如何将一个对象传递给另一个对象的属性?

3

我在reducer中有这段代码:

export const getSerieSuccess = (state = INITIAL_STATE, action) => {
   return {
      ...state,
      isLoadding: false,
      serie: action.serie   //action.serie is a object with id, name, genre e status
   }
}

我想知道如果我执行 serie: action.serie,我是传递一个值还是引用。我像这样执行它:
export const getSerieSuccess = (state = INITIAL_STATE, action) => {
const serie = {...action.serie};
   return {
      ...state,
      isLoadding: false,
      serie
   }
}

函数式编程如何让WAI(Web Application Interface)更高效?


1
你应该选择第一种选项,因为你已经通过展开...state来避免了状态突变,而action只是返回的数据承诺,所以你不必担心它。对于此事,它也不会对action做任何事情。 - Joelgullander
3
使用函数式编程,你可以轻松地使用简单的第一种解决方案(不涉及对象的副本),因为你知道对象不会在其他地方被改变。 - Bergi
1个回答

1
你可以使用这两种变量,只要操作的有效负载不会被进一步引用并且不会被改变/变异。 好的例子:
store.dispatch(new SomeAction({a: b: {
  c: 1234
}));

错误的(因为您传递了一个引用并在之后更改它):

let value = new SomeAction({a: b: {
  c: 1234
});
store.dispatch(value);
value.a.b.c = 44543; // bad

setTimeout(_ => (value.a.b.c = 5555), 5000); // bad

注意:如果你想让它真正安全(不传递引用),你可以在动作内部复制传递的值。

@Bergi 但是当进行系列操作时:action.serie,我将action.serie引用归属于serial属性,例如const series = action.serie?在上面显示的示例中,我只得到一个字符串需要更新。如果我返回到显示系列的组件,一个系列列表,在其中我有编辑和删除每个系列的选项。如果我编辑它,那么不会改变传递给该组件的action引用吗? - Jose Alves

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接