使用打字稿进行此操作时会有一些问题,所以这是一个例子。
一个问题是当你只使用dispatchToProps(而不是映射任何状态道具)时,重要的是不要省略状态参数(它可以用下划线前缀命名)。
另一个问题是,必须使用仅包含传递道具的接口来键入ownProps参数 - 这可以通过将您的道具接口拆分为两个接口来实现,例如
interface MyComponentOwnProps { value: number; } interface MyComponentConnectedProps { someAction: (x: number) => void; } export class MyComponent extends React.Component< MyComponentOwnProps & MyComponentConnectedProps > { ....// component logic } const mapStateToProps = ( _state: AppState, ownProps: MyComponentOwnProps, ) => ({ value: ownProps.value, }); const mapDispatchToProps = { someAction, }; export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);
可以通过传递单个参数来声明组件:
<MyComponent value={event} />
你可以传入第二个参数 mapStateToProps(state, ownProps) 这将使您可以访问传递给mapStateToProps中组件的道具
mapStateToProps(state, ownProps)
如果您正在使用装饰器,下面的代码给出了一个示例,如果您想为redux连接使用装饰器。
@connect( (state, ownProps) => { return { Foo: ownProps.Foo, } } ) export default class Bar extends React.Component {
如果你现在检查 this.props.Foo 你会看到从哪里添加的道具 Bar 使用了组件。
this.props.Foo
Bar
<Bar Foo={'Baz'} />
在这种情况下 this.props.Foo 将是字符串'Baz'
希望这能澄清一些事情。