Как изменить экран, используя stackNavigation в React Native? - PullRequest
0 голосов
/ 05 июля 2018

У меня есть один экран, который в заголовке состоит из кнопки, чтобы перейти на другой экран.

У меня уже есть модель, но она не работает: как показано ниже, я хочу изменить экран с RecipeList на NewRecipeForm, используя кнопку в заголовке

const AppStackNavigator = createStackNavigator({
 List: {
  screen: RecipesList,
  navigationOptions: {
    title:'RecipesList',
    headerLeft: (
      <Button onPress={()=>this.props.navigation.navigate('NewRecipeForm')}>
      <Text>+</Text>
      </Button>
    )
    }},
 NewRecipeForm: {screen: CreateRecipeForm, 
        navigationOptions: {title:'Add new recipe'}},
  Details: {screen: RecipesDetails, navigationOptions: {title:'RecipeDetails'}},

export default class App extends React.Component {
 render() {
  return <AppStackNavigator initialRouteName='List' />;
   }
}

Я надеюсь, что вы поможете мне с решением

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Вы можете использовать следующий код внутри вашего RecipesList Component вместо того, чтобы иметь его внутри createStackNavigator (). Смотрите Snack для полной реализации.

static navigationOptions = ({ navigation }) => {
    return {
      headerTitle: "RecipesList",
      headerLeft: (
        <Button
          onPress={() => navigation.navigate('NewRecipeForm')}
          title="+"
        />
      ),
    };
  };
0 голосов
/ 05 июля 2018

Вы можете использовать свой стековый навигатор, как показано ниже, вы можете деструктурировать свойство навигации, предоставив свойство навигатора, а также в самом createStackNavigator

const AppStackNavigator = createStackNavigator({
    List: {
        screen: RecipesList,
        navigationOptions: ({navigation}) => {  //destructure the navigation property here 
            return {
                title: 'RecipesList',
                headerLeft: (
                    <Button onPress={() => navigation.navigate('NewRecipeForm')}>
                        <Text>+</Text>
                    </Button>
                )
            }
        }
    },
    NewRecipeForm: {
        screen: CreateRecipeForm,
        navigationOptions: { title: 'Add new recipe' }
    },
    Details: { screen: RecipesDetails, navigationOptions: { title: 'RecipeDetails' } }

});
0 голосов
/ 05 июля 2018

Вы не можете получить доступ к реквизитам вашего компонента в headerLeft, но вы можете напрямую использовать навигацию следующим образом:

  <Button onPress={()=> navigation.navigate('NewRecipeForm')}>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...