【问题标题】:How i can pass an object to an attribute of an object?我如何将对象传递给对象的属性?
【发布时间】:2019-06-01 14:45:24
【问题描述】:

我在 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 如何更好地使用函数式编程?

【问题讨论】:

  • 你应该做第一个选项,你已经没有通过传播......状态来改变状态,动作只是数据的返回承诺,所以你不必担心。就此而言,它也不会对操作做任何事情。
  • 通过函数式编程,您可以轻松地使用简单的第一个解决方案(不涉及对象的副本),因为您知道您也不会在其他地方改变对象。

标签: javascript redux functional-programming reducers


【解决方案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 但是在执行 series:action.serie 时,我将 action.serie 引用归因于像 const series = action.serie 这样的串行属性?在上面显示的示例中,我只得到一个字符串来更新它。如果我要返回显示系列的组件,一个系列列表,我可以在其中编辑和删除每个系列。如果我编辑它,它不会更改传递给该组件的操作引用吗?
猜你喜欢
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多