Конструктор компонента не работает во второй раз - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть класс Компонентов:

class AutoPage extends Component {
constructor(props) {
    super(props);
    console.log("Auto is " + this.props.route.params.auto);
    this.state = {
        avto: this.props.route.params.auto,
    }
    this.array = [
        this.state.avto.PICTURE,
    ];

    for (let dopImage of this.state.avto.DOP_FOTO.VALUE) {
        this.array.push(dopImage);
        //console.log(avto);
    }
    }
}

Я открываю этот Компонент из другого места:

<TouchableOpacity onPress={() => navigate('AutoPage', {
                auto: item
              })}>

Вот навигация моего ящика:

 <Drawer.Navigator drawerContent={props => <CustomSidebarMenu {...props} />} width={Dimensions.get('window').width - 130}
  component={CustomSidebarMenu}>
  <Stack.Screen name="AutoListPage" component={AvtoListPageNav} />
  <Stack.Screen name="AutoPage" component={AutoPage} options={{ headerTitle: "GorodAvtoPrime", headerTitleAlign: "center" }} /> 
</Drawer.Navigator>

Когда я нажимаю TouchableOpacity AutoPage открывается и его конструктор работает. Но когда go возвращается и снова нажимает TouchableOpacity, AutoPage открывается, и его конструктор не работает. И я получаю предыдущие данные в this.props.route.params.auto. Как мне сделать конструктор запуска из AutoPage каждый раз, когда я нажимаю TouchableOpacity?

1 Ответ

1 голос
/ 17 апреля 2020

Возможно, вы захотите подписаться на событие навигации focus. Экран используется повторно, поэтому он не создается снова.

https://reactnavigation.org/docs/navigation-events

class AutoPage extends Component {
  constructor(props) {
    super(props);
    this.state = {
        avto: null,
    }
  }

  componentDidMount() {
    this._unsubscribe = this.props.navigation.addListener('focus', () => {
      // Update your state here
    });
  }

  componentWillUnmount() {
    this._unsubscribe();
  }
}
...