在州内存储课程被认为是不好的做法吗?我已经读过,状态应该是易于序列化的对象,并且类会破坏这种约定。
我正在创建一个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
}
}
通过发出以下actionCreator将对象添加到商店:
export function addPerson(args = {}) {
return (dispatch) => {
dispatch({
type: 'ADD_PERSON',
obj: new Person(args)
});
};
}
适当的人员减少器将其粘贴到状态,以便我可以从应用程序的其余部分获取它。
这样当我从状态中抓取对象时,我可以运行它的验证和有效的原型函数,以查看模型是否有效并做出适当的反应。
这是否会违反/ redux惯例?解决这个问题的另一种方法是什么?使用上述方法可能遇到的潜在问题是什么?现在不能预见任何问题...但我也没有反应/减少(~4个月)的经验
修改:
我应该补充一点,我只通过reducer改变对象状态。我小心不要在应用程序的其他地方改变状态。
答案 0 :(得分:1)
是的,它通常被认为是一种反模式,因为它打破了做时间旅行调试(Redux的核心卖点之一)等功能。有关详细信息,请参阅http://redux.js.org/docs/FAQ.html#organizing-state-non-serializable上的Redux常见问题解答。
如果您希望在普通数据上拥有更多类似于对象的外观,则可能需要查看https://github.com/tommikaikkonen/redux-orm之类的内容。
答案 1 :(得分:0)
所以我认为我的代码可以帮助某人找到一种方法,可以通过困难的函数来解决将转换类转换为函数的问题,不支持原型,让我的一些代码可以对其进行修复并且很容易
import React from 'react'
import PropTypes from 'prop-types'
const Link = ({ active, children, onClick }) => (
<button
onClick={onClick}
disabled={active}
style={{
marginLeft: '4px',
}}
>
{children}
</button>
)
Link.propTypes = {
active: PropTypes.bool.isRequired,
children: PropTypes.node.isRequired,
onClick: PropTypes.func.isRequired
}
export default Link