У меня react-navigation
роутер вот так:
const RootNavigator = createSwitchNavigator({
App: createBottomTabNavigator({
Home: {
screen: HomeScreenContainer
},
Scan: {
screen: DocumentScanScreenContainer
},
// ...
}, {
tabBarOptions: {
showLabel: false,
// ...
}
})
})
HomeScreenContainer
и DocumentScanScreenContainer
требуются, потому что react-navigation
принимает только React.Component
, а мои HomeScreen
и DocumentScanScreen
компоненты являются компонентами Redux, и при их прямом импорте react-navigation
выдает ошибку.
HomeScreenContainer
и DocumentScanScreenContainer
похожи, так что вот DocumentScanScreenContainer
:
import React from 'react'
import PropTypes from 'prop-types'
import DocumentScanScreen from '../../screens/DocumentScanScreen'
export default class DocumentScanScreenContainer extends React.Component {
static propTypes = {
navigation: PropTypes.shape.isRequired
}
render() {
const { navigation } = this.props
// Passing the navigation object to the screen so that you can call
// this.props.navigation.navigate() from the screen.
return (
<DocumentScanScreen navigation={navigation} />
)
}
}
И, наконец, короткая версия DocumentScanScreen
:
import React from 'react'
import { connect } from 'react-redux'
import PropTypes from 'prop-types'
class DocumentScanScreen extends React.Component {
static propTypes = {
token: PropTypes.string,
navigation: PropTypes.shape.isRequired
}
componentDidMount() {
const { token, navigation } = this.props
if (token === undefined || token === null || token === 0) {
navigation.navigate('Authentication')
}
}
// ...
}
У меня на каждом уровне есть предупреждения о том, что navigation
не определено, поэтому мой DocumentScanScreenContainer
не получает navigation
реквизит от маршрутизатора:
Предупреждение: сбойный тип опоры: DocumentScanScreenContainer: тип опоры navigation
недопустим; это должна быть функция, обычно из пакета prop-types
, но полученная undefined
.
Я делаю это неправильно или есть способ передать от маршрутизатора navigation
реквизит к DocumentScanScreenContainer
?