收到新订阅时如何更新导航标题中的计数?

Posted

技术标签:

【中文标题】收到新订阅时如何更新导航标题中的计数?【英文标题】:How to update the count in the navigation header right when a new Subscription is received? 【发布时间】:2019-08-09 15:36:29 【问题描述】:

我正在使用 graphql 订阅在创建新用户时获取更新,一切正常,我正在接收更新,但我无法从渲染方法更新导航标题中的通知计数。

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
      );



创建新用户时,我将收到订阅标签内的数据

【问题讨论】:

【参考方案1】:

试试这个:

 if (data && data !== oldData) 

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

在导航选项中

<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>

【讨论】:

组件无限重新渲染。 确保检查新的data 不等于old data 并仅在新数据可用时调用 setParam ...它会无限地呈现原因 if (data ) 总是正确的.. 请检查编辑 plz 在我做了一个小改动之后,它现在的工作真棒,即使用 const newData = navigation.getParam('data'); 调用外部返回方法。跨度>

以上是关于收到新订阅时如何更新导航标题中的计数?的主要内容,如果未能解决你的问题,请参考以下文章

订阅 - 如何使用 Braintree 更新下一个计费日期

突变后使用订阅和更新创建重复节点 - 使用 Apollo 客户端

如何使用钩子清理 componentDidUpdate 中的异步函数

这个订阅有啥问题?我收到更新,但视图未刷新

GraphQL 订阅:如何根据订阅中的事件更新对象

第二个物理发布者如何收到新订阅者的通知?