Dhi*_*raj 7 reactjs react-native react-redux react-navigation
当使用react-navigator时,我收到错误说明
这个导航器有导航和容器道具.所以目前还不清楚它是否应该拥有自己的国家.删除道具:'completedOrders,isLoading,hasError,getCompletedOrders'.如果导航器应从导航道具中获取其状态.如果导航器应保持自己的状态,请不要传递导航道具
如何解决这个问题.我想将completedOrders传递给Tabnavigator(AdminCompletedOrdersTab).
以下是我的代码
const AdminCompletedOrdersTab = TabNavigator({
completedOrdersTab: { screen: CompletedOrders },
rejectedOrdersTab: { screen: RejectedOrders },
cancelledOrdersTab: { screen: CancelledOrders }
});
class CompletedOrdersScreen extends Component {
static navigationOptions = {
title: "Completed Orders"
}
componentDidMount() {
this.props.getCompletedOrders(this.props.user);
}
render() {
return(
<AdminCompletedOrdersTab {...this.props}/>
)
}
}
const mapStateToProps = (state) => {
return ({
completedOrders: state.completedOrders.completedOrders,
isLoading: state.completedOrders.isLoading,
hasError: state.completedOrders.hasError
})
}
const mapDispatchToProps = (dispatch) => {
return ({
getCompletedOrders: bindActionCreators(getCompletedOrders, dispatch)
})
}
export default connect(mapStateToProps, mapDispatchToProps)(CompletedOrdersScreen);
Run Code Online (Sandbox Code Playgroud)
小智 4
对于坚持这个问题的人来说,解决方法是:使用 mergeProps (react-redux connect 的第三个参数)和 screenProps 来避免此错误。
例如,这段代码将变为:
const AdminCompletedOrdersTab = TabNavigator({
completedOrdersTab: { screen: CompletedOrders },
rejectedOrdersTab: { screen: RejectedOrders },
cancelledOrdersTab: { screen: CancelledOrders }
});
class CompletedOrdersScreen extends Component {
static navigationOptions = {
title: "Completed Orders"
}
componentDidMount() {
this.props.screenProps.getCompletedOrders(this.props.user);
}
render() {
return(
<AdminCompletedOrdersTab
{...this.props}
{...{/* anything you need from screenProps */}}
/>
)
}
}
const mapStateToProps = (state) => {
return ({
completedOrders: state.completedOrders.completedOrders,
isLoading: state.completedOrders.isLoading,
hasError: state.completedOrders.hasError
})
}
const mapDispatchToProps = (dispatch) => {
return ({
getCompletedOrders: bindActionCreators(getCompletedOrders, dispatch)
})
}
const mergeProps = (state, dispatch, ownProps) => {
return ({
...ownProps,
screenProps: {
...ownProps.screenProps,
...state,
...dispatch,
}
})
}
export default connect(mapStateToProps, mapDispatchToProps, mergeProps)(CompletedOrdersScreen);
Run Code Online (Sandbox Code Playgroud)
PS:没有用mapDispatchToProps检查它,但认为它也应该有效。
| 归档时间: |
|
| 查看次数: |
3246 次 |
| 最近记录: |