реакция-навигация: неопределенные навигационные реквизиты - PullRequest
0 голосов
/ 05 сентября 2018

У меня 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?

1 Ответ

0 голосов
/ 05 сентября 2018

Попробуйте это:

Scan: {
  screen: (props) => <DocumentScanScreenContainer {...props} />
},

* Я не уверен, что это сработает, но я не могу добавить комментарий, потому что у меня <50 респ. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...