Как передать строку на экраны в BottomTabNavigator - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть BottomTabNavigator с 4 скринами внутри, я хотел бы передать строку в некоторые из них.

Как я могу это сделать?Спасибо.

class Main extends Component {
    static navigationOptions = {
        title: 'Developpe Inclinné',
        headerTintColor: '#fff',
        headerStyle: {
            backgroundColor: '#e8142d',
        },
    };
    render() {
        const myPath='aRouteForFirebase'
        return (
            <AppContainer myPath={myPath} />
        );
    }
}
const TabNavigator = createBottomTabNavigator({
    DeveloppeInclinne,
    Chrono,
    Session, // needs the props
    Resultats // // needs the props
})

const AppContainer = createAppContainer(TabNavigator);

Ответы [ 4 ]

1 голос
/ 21 апреля 2019

Вот лучшая реализация:

class Main extends Component {
  constructor(props) {
    super(props)
    this.state = {
      myPath: 'aRouteForFirebase',
    }
    this.AppContainer = createAppContainer(this.TabNavigator)
  }

  TabNavigator = createBottomTabNavigator({
    DeveloppeInclinne,
    Chrono,
    Session: { screen: () => <Session myPath={this.state.myPath} />},
    Resultats { screen: () => < Resultats myPath={this.state.myPath} />}
  })

  render() {
    const { AppContainer } = this
    return (
      <AppContainer />
    )
  }
}
1 голос
/ 21 апреля 2019

Я не могу найти ничего в реагирующей навигационной документации, которая бы это поддерживала.Но я могу ошибаться.Я могу предложить еще один способ сделать это.Создайте HOC и оберните ваши компоненты этим.Все они будут иметь доступ к общей строке.

const SomethingCommonHOC = (Component, extraProps ) => {

  return class SomeComponent extends React.Component {
    render() {
      return <Component {...this.props} {...extraProps}/>;
    }
  };
};
// Use it something like this.
SomethingCommonHOC(Session);

Спасибо

Редактировать: я понимаю, что это трудно объяснить на самом деле.Вот почему я не большой поклонник HOC.:).Я попытаюсь объяснить вам, что требуется изменить.

Create a new file: 

Put this component definition in it:
const CommonHOC = (Component, extraProps) => {

      return class SomeComponent extends React.Component {
        render() {
          return <Component {...this.props} {...extraProps} />;
        }
      };
    };
export default CommonHOC

Then import it in your component files , in your case DeveloppeInclinne, Chrono, Session, Resultats.

В компоненте, где вам нужно передать общую строку: допустим, вы редактируете в файле компонента сеанса

 import CommonHOC from the "path to CommonHOC"

    export default CommonHOC(Session, {
 myString: "myString"
})

Примечание: вы можете создавать строки с постоянной динамикой, конвертируя 2-й параметр в объект и распространяя его внутри общего компонента

1 голос
/ 21 апреля 2019

Просто для пояснения:

class Main extends Component {
  static navigationOptions = {
    title: 'Developpe Inclinné',
    headerTintColor: '#fff',
    headerStyle: {
        backgroundColor: '#e8142d',
    },
  };
  render() {
    const myPath='aRouteForFirebase'
    const TabNavigator = createBottomTabNavigator({
      DeveloppeInclinne,
      Chrono,
      Session: { screen: () => <Session myPath={myPath} />},
      Resultats { screen: () => < Resultats myPath={myPath} />}
    }
    const AppContainer = createAppContainer(TabNavigator);
    return (
        <AppContainer />
    );
  }
}

Однако я не думаю, что это красивый код, возможно, вам стоит подумать об интеграции Redux

0 голосов
/ 21 апреля 2019

Вы можете сделать это:

const TabNavigator = createBottomTabNavigator({
   DeveloppeInclinne,
   Chrono,
   Session: { screen: props => <Session {...props} />},
   Resultats { screen: props => < Resultats {...props} />}
}

// in class Session ...
console.log(this.props.myPath)
=> aRouteForFirebase
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...