为什么在行动中使用符号是不好的做法



我的应用程序中有一些操作类型,我已经这样声明了:

export const TICTACTOE_PLAY = Symbol();
export const TICTACTOE_RESET = Symbol();

然后我写了一些行动调度员这样:

export const play = coordinates => ({ type: TICTACTOE_PLAY, coordinates });
export const reset = () => ({ type: TICTACTOE_RESET });

我更喜欢符号而不是字符串,因为它们是原始的,我相信它们比字符串(在减速器中(更容易比较,而且它们不会相互碰撞。

然而,在Redux风格指南中,我读到这是一个反模式。然而,我不能完全理解这句话:

这确保了通过Redux进行调试等功能DevTools将按预期工作。它还确保UI按预期更新。

为什么像符号这样的不可序列化值会阻止Redux DevTools或UI按预期工作?我知道这可能无助于调试,我知道状态必须是可序列化的(对于服务器端渲染等用例(,但我不明白为什么操作必须是可串行的。

在您询问为什么它可能会破坏Redux DevTools的特定情况下,常见问题解答中似乎有一节是关于这一点的。

与state一样,可序列化操作启用了Redux的一些定义功能,如时间旅行调试以及记录和回放操作。对类型值使用Symbol之类的东西,或者对操作本身使用instanceof检查,都会打破这种局面。

相关内容

  • 没有找到相关文章

最新更新