Как обновить счетчик в заголовке навигации сразу после получения новой подписки?

#react-native #graphql #react-navigation

#react-native #graphql #реакция-навигация

Вопрос:

я использую подписку graphql для получения обновлений при создании нового пользователя, все работает нормально, я получаю обновления, но я не могу обновить счетчик уведомлений в заголовке навигации с помощью метода render.

 class ContactsList extends Component {

static navigationOptions = ({ navigation }) => {
    return {

        headerRight: (
            <View style={{ flexDirection: 'row' }}>
                <View style={{ marginEnd: 5 }}>
                    <Icon.Button
                        name="bell"
                        backgroundColor="#3b5998"
                        onPress={() => alert('Bell Pressed!!')}>

                    **//i want update the count here when new contact is created** 
                    </Icon.Button>
                </View>
            </View>

        ),
    };
};
render() {
    return (
        <View>
            <Subscription
                subscription={NEW_NOTIFICATION_SUBSCRIPTION}
                variables={{ token: this.state.golbalDashboardToken }} >
                {({ data, loading }) => {
                    if (loading) {
                        // alert('Loading Subcription');
                        return <Text>Loading Subscription</Text>
                    }
                    if (data) {

                        **// when new contact is created i will receive the data her**


                    }

                }
                }  
            </Subscription>
        </View
      );

}
}
  

Я получу данные внутри тега Subscription при создании нового пользователя

Ответ №1:

Попробуйте это:

  if (data amp;amp; data !== oldData) {

     **// when new contact is created i will receive the data her**
     this.props.navigation.setParams({ data }); // << this
 }
  

в navigationOptions

 <Icon.Button
          name="bell"
          backgroundColor="#3b5998"
          onPress={() => alert('Bell Pressed!!')}>

          **//i want update the count here when new contact is created**
          const newData = navigation.getParam('data'); // this
 </Icon.Button>
  

Комментарии:

1. Компонент повторно отображает бесконечно.

2. убедитесь, что вы проверили, что ваше новое значение data не равно old data , и вызывайте setParam только тогда, когда доступны новые данные… он отображает бесконечно , потому что if (data) всегда имеет значение true .. проверьте редактирование, пожалуйста

3. потрясающе, что он работает сейчас, после того, как я внес небольшое изменение, т. е. используя const newData = navigation.getParam(‘data’); вызываем вне метода возврата.