Реагировать Собственное изменение, пусть значение не изменяется в дочернем компоненте как подпор - PullRequest
0 голосов
/ 27 декабря 2018

Эй, я немного застрял в этой проблеме.Вся проблема в том, что я не могу использовать состояние внутри navigationOptions.Итак, я попробовал это:

Я объявляю свой let let isFilterVisible: boolean = false;

Есть блок навигации, где я вызываю функцию внутри события onPress.

static navigationOptions = ({ navigation }: NavigationInjectedProps) => ({
    headerRight: (
            <FilterButton onPress={() => {Installations.handleFilterVisibility(isfilterVisibile)}}/>
   ),
});

Простая static функциягде я обрабатываю значение

static handleFilterVisibility(filterVisibility: boolean){
    isfilterVisibile = !filterVisibility;
}

Затем оно передается дочернему элементу как реквизиты

<Filter isFilterVisible={isfilterVisibile}/>

Все выглядит хорошо, но когда я пытаюсь зарегистрировать реквизиты в дочернем компоненте.

ComponentDidUpdate даже ComponentWillReceiveProps ничего не записывает.

Есть идеи, где может быть ошибка?

1 Ответ

0 голосов
/ 28 декабря 2018

Итак, наконец, я решил это благодаря навигации params, решение:

static navigationOptions = ({ navigation }: NavigationInjectedProps) => ({
    headerRight: (
            <FilterButton onPress={() => {
                const {params = {}} = navigation.state;
                params.handleFilterVisibility()
            }}/>
    ),
});

handleFilterVisibility = () => {
    const { isFilterVisible } = this.state;
    const { navigation } = this.props;
    this.setState({isFilterVisible: !isFilterVisible}, () => {
        navigation.setParams({ 
            isFilterVisible
        });
    })
}

componentDidMount() {
    const { navigation } = this.props;
    const { isFilterVisible } = this.state;
    navigation.setParams({
        handleFilterVisibility: this.handleFilterVisibility,
        isFilterVisible
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...