在 Redux 状态下使用原型函数存储对象

eh0*_*908 11 javascript state reactjs redux

在状态中存储类是否被认为是不好的做法?我读过状态应该是容易序列化的对象和类打破了这个约定。

我正在创建一个 Web 应用程序,它使用 React/Redux 和一组支持模型来收集用户的信息。

例如,我有以下模型:

class Person {
  constructor(params = {}) {
    this.firstName = params.firstName || '';
    this.lastName = params.lastName || '';
    this.gender = params.gender || '';
    this.dateOfBirth = params.dateOfBirth || '';
    this.stateOfResidence = params.stateOfResidence || '';
    this.email = params.email || '';
  }
  validateField(args) {
    // remove for brevity
  }
  valid(args) {
    // remove for brevity    
  }
}
Run Code Online (Sandbox Code Playgroud)

通过发出以下 actionCreator 将对象添加到存储中:

export function addPerson(args = {}) {
  return (dispatch) => {
    dispatch({
      type: 'ADD_PERSON',
      obj: new Person(args)
    });
  };
}
Run Code Online (Sandbox Code Playgroud)

合适的人减速器将其粘贴到状态中,以便我可以从应用程序的其余部分中获取它。

这样,当我从状态中获取对象时,我可以运行它的验证和有效原型函数,以查看模型是否有效并做出适当的反应。

这是否打破了 React/Redux 约定?解决这个问题的另一种方法是什么?使用上述方法可能会遇到哪些潜在问题?现在无法预见任何问题......但我也没有太多的 React/Redux 经验(约 4 个月)

编辑:

我应该补充一点,我通过减速器改变对象状态。我很小心不要在应用程序的其他地方改变状态。

mar*_*son 4

是的,它通常被认为是一种反模式,因为它破坏了诸如时间旅行调试(Redux 的核心卖点之一)之类的功能。有关更多详细信息,请参阅Redux 常见问题解答。

如果您确实希望在纯数据上拥有更多类似对象的外观,您可能需要研究类似redux-orm的东西。