Реагировать на состояние навигации. Параметры не работают

Это не работает. Все перепробовала. Ничего не работает. state.params просто не существует, если вы делаете продвинутое приложение.

У меня такая проблема с реагирующей "навигацией". В руководстве сказано, что там должен быть объект params https://reactnavigation.org/docs/navigation-prop.html#state-the-screen-s-current-state-route Но это не так.

Я установил такой параметр id на экране 1, когда перешел на экран 2:

 <TouchableWithoutFeedback onPress = { ()=> this.props.navigation.navigate('FontsTab', { id: item.id }) } style = {styles.listHeader} >
                <View  style = {styles.listRowContainer}>
                    <View  style = {styles.listinside1Container}>
                        <Image  style = {styles.listImage} source = {item.icon} />
                        <View  style = {styles.listContainer} onPress = {(event) => this._selectedItem(item.text)}  >
                            <Text style = {styles.listHeader} >
                              {item.title}
                            </Text>
                            <Text  style = {styles.listValue} >{item.value}</Text>
                            <Image 
                                style = {{width: 50, height: 50}}
                                source = {{uri: item.img}}
                            />

                        </View>
                    </View>

                                </View>
            </TouchableWithoutFeedback>

Но это не работает. На экране 2 я не могу использовать state.params:

     <ScrollView style = {styles.container}>
          <Text>{ JSON.stringify(this.props.navigation)}</Text>
          <Text>TEST{ state.params }</Text>
          <Image
              style = {{width: 150, height: 150}}
              source = {{uri: this.state.dataSource.img}}
          />
          <Text  style = {styles.textStyle} >{this.state.dataSource.text}</Text>
      </ScrollView>

state.params просто ничего не возвращает. Что я могу с этим поделать?

Полный класс для screen2:

class Fonts extends Component {
    constructor(props) {
        super(props);
        this.state = {
            params: null,
            selectedIndex: 0,
            value: 0.5,
            dataSource: null,
            isLoading: true
        };
        this.componentDidMount = this.componentDidMount.bind(this);
    }
    getNavigationParams() {
        return this.props.navigation.state.params || {}
    }

    componentDidMount(){
        return fetch('http://www.koolbusiness.com/newvi/4580715507220480.json')
            .then((response) => response.json())
            .then((responseJson) => {
                this.setState({
                    ...this.state,
                    isLoading: false,
                    dataSource: responseJson,
                }, function(){
                });
            })
            .catch((error) =>{
                console.error(error);
            });
    }
  render() {
      if (this.state.isLoading){
          return(
              <View style = {{flex: 1, padding: 20}}>
                  <ActivityIndicator/>
              </View>
          )
      }
    return (
      <ScrollView style = {styles.container}>
          <Text>{ JSON.stringify(this.props)}</Text>
          <Text>TEST{ this.state.params }</Text>
          <Image
              style = {{width: 150, height: 150}}
              source = {{uri: this.state.dataSource.img}}
          />
          <Text  style = {styles.textStyle} >{this.state.dataSource.text}</Text>
      </ScrollView>
    );
  }
}

В моем приложении эту боль можно воспроизвести с помощью простой кнопки на экране screen1:

<Button onPress = {() => navigate('FontsTab', { name: 'Brent' })} title = "Go to Brent's profile" />

Затем переключение на FontsTab работает, но параметры не находятся в объекте состояния:

Реагировать на состояние навигации. Параметры не работают

У меня также есть этот код для просмотра вкладок

import React, { Component } from 'react';
import { View, Text, StyleSheet } from 'react-native';

import { StackNavigator } from 'react-navigation';
import { Icon } from 'react-native-elements';

import FontsHome from '../views/fonts_home';
import FontsDetails from '../views/fonts_detail';

const FontsTabView = ({ navigation }) => (
  <FontsHome banner = "Fonts" navigation = {navigation} />
);

const FontsDetailTabView = ({ navigation }) => (
  <FontsDetails banner = "Fonts Detail" navigation = {navigation} />
);

const FontsTab = StackNavigator({
  Home: {
    screen: FontsTabView,
    path: '/',
    navigationOptions: ({ navigation }) => ({
      title: '',
      headerLeft: (
        <Icon
          name = "menu"
          size = {30}
          type = "entypo"
          style = {{ paddingLeft: 10 }}
          onPress = {() => navigation.navigate('DrawerOpen')}
        />
      ),
    }),
  },
  Detail: {
    screen: FontsDetailTabView,
    path: 'fonts_detail',
    navigationOptions: {
      title: 'Fonts Detail',
    },
  },
});

export default FontsTab;
Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
5
0
2 621
2

Ответы 2

this.props.navigation.state.params.id предоставит вам значение идентификатора параметра, переданного с screen1.

Я тоже так думал, но, очевидно, я что-то делаю не так. Когда я отлаживаю this.props.navigation, там нет объекта state!

Niklas R. 18.03.2018 14:30

Он говорит routeName: "Home", когда я отлаживаю объект state. Почему routeName не "FontsTab"?

Niklas R. 18.03.2018 16:43

Я поместил свой экран в правильный StackNavigator, и он заработал.

Другие вопросы по теме