2017-06-22 66 views
0

我想在我的redux reducer中的ES6中创建一个新的对象字面量,只有在该操作包含特定属性时才会覆盖某个键。有条件地用redux reducer替换状态值

return { ...state, items: newItems, lastRefresh: action.meta && action.meta.timestamp }

此代码将设置lastRefreshundefined如果action.metaaction.meta.timestamp没有定义。

我知道长的形式是这样的:

let result = { 
    ...state, 
items: newItems 
} 

if (action.meta && action.meta.timestamp) { 
    result.lastRefresh = action.meta.timestamp 
} 

return result 

但它似乎是冗长。也许这样可能与Object.assign可能?

+0

我想说的例子看起来完全正常。它工作,并且它是可读的。此外,优化可读性一般会减少击键的优化次数:) – markerikson

回答

1

如果你真正想要的是覆盖state.lastRefresh:

return { 
    ...state, 
    items: newItems, 
    lastRefresh: action.meta && action.meta.timestamp ? action.meta.timestamp : state.lastRefresh 
} 
+0

我接受这个答案,但是我的OP中将会介绍更多可读方法,@Markerikson在那里评论过。 – philk

+0

我不明白为什么你在OP上写的那个会更可读。三元运算符是为此而设计的,为了将值分配给一个变量,在这种情况下它是一个对象属性,您只需要习惯它。 而且你在性能上得到了加分。 –

相关问题