gpt4 book ai didi

reactjs - 如何解决 'this navigator has both navigation and container props'错误

转载 作者:行者123 更新时间:2023-12-03 13:27:09 25 4
gpt4 key购买 nike

使用react-navigator时,我收到错误提示

this navigator has both navigation and container props. so it is unclear if it should own its own state. Remove props :'completedOrders,isLoading,hasError,getCompletedOrders'. if the navigator should get its state from the navigation prop. If the navigator should maintain its own state, do not pass navigation props

如何解决这个问题?我想将 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);

最佳答案

解决方法对于那些坚持这个问题的人:使用 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);

P.S.:没有用mapDispatchToProps检查它,但认为它也应该有效。

关于reactjs - 如何解决 'this navigator has both navigation and container props'错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50589857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com