取而代之:
function mapStateToProps(appState: ApplicationState, ownProps: any): MyComponentState {
...
return {
someObject: someObject,
isNew: isNew
};
}
用这个:
function mapStateToProps(appState: ApplicationState, ownProps: any): MyComponentState {
...
return new MyComponentState(someObject, isNew);
}
引发以下错误:
Connect(MyComponent)中的mapStateToProps()必须返回一个普通对象。 取而代之的是[object Object]。
恕我直言,new CustomPageState()
具有提高可读性的好处,能够在需要时调用构造函数逻辑,并且允许一种处理可选参数的好方法,因此感觉这是一种更好的方法(在工作时)打字稿)。
在这种情况下,完成返回普通对象的建议/最佳实践方法是什么?
答案 0 :(得分:1)
据我了解React / Redux,您的第一个代码段似乎更准确地实现了。 mapStateToProps
应该返回您的状态的子集,作为普通对象,以减少开销。返回一个完全构造的状态对象似乎打败了目的。
如果你想在mapStateToProps
中保持干净,我会向MyComponentState
添加一个返回普通对象的方法。在这种情况下返回MyComponentState
类型似乎也是不正确的,因为再次,预期会有一个普通对象。如果您想要一个明确的属性列表,我建议创建一个界面(例如IComponentStateProps
)并在您的班级MyComponentState implements IComponentStateProps { ... }
答案 1 :(得分:0)
我决定将| any
添加到返回类型。
mapStateToProps(appState: ApplicationState, ownProps: any): MyComponentState | any
{
...
return {
someObject: someObject,
isNew: isNew
};
}
这允许部分对象,正如Greg指出的那样是一个巨大的好处,但也允许visual studio仍然给我代码提示和Typescript来继续。
我希望将来有更好的方法,或者其他人有更好的想法?
我还考虑过使MyComponentState的所有属性都是可选的;然而, 这样做需要在使用这些属性的地方进行更多的真理检查。 由于某些属性确实需要,这条路线也会引入一些编程维护混乱。