refetch Container 在 Relay Modern 的 refetch Options 中无论是不是强制都给出相同的结果

Posted

技术标签:

【中文标题】refetch Container 在 Relay Modern 的 refetch Options 中无论是不是强制都给出相同的结果【英文标题】:refetchContainer gives same results with or without force in refetchOptions in Relay Modernrefetch Container 在 Relay Modern 的 refetch Options 中无论是否强制都给出相同的结果 【发布时间】:2018-03-13 13:28:47 【问题描述】:

在 Relay Modern refetchContainer 与 refetchOptions: force: true refetchOptions: force: false 给出相同的结果。

我有一个像下面这样的 refetch 容器:

export default createRefetchContainer(radium(UserPicker), graphql`
  fragment UserPicker_company on Company
  @argumentDefinitions(
    searchString:  type: "String", defaultValue: "" 
  ) 
    userSearch(text: $searchString, first: 10) 
      edges 
        node 
          id
          name
          email
          picture
        
      
    
  
`, graphql `
  query UserPickerRefetchQuery($companyId: ID, $searchString: String) 
    company(id: $companyId) 
      ...UserPicker_company @arguments(searchString: $searchString)
    
  
`);

在输入标签的 onChange 方法中,我有以下代码:

onInputChange = (e) => 
  const value = e.target.value;
  this.props.relay.refetch( searchString: value );

当我输入新字符和删除字符时,Relay 会进行网络查询。理想情况下,当字符被删除时,它应该使用之前查询的相同数据。

【问题讨论】:

【参考方案1】:

Relay Modern 默认情况下不为网络请求实现客户端缓存配置。这个想法是通过允许用户选择要缓存哪些查询以及不缓存哪些查询来给予用户更多控制权。

一些使用RelayQueryResponseCache的实现建议可以在这里找到:https://github.com/facebook/relay/issues/1687#issuecomment-302931855

【讨论】:

以上是关于refetch Container 在 Relay Modern 的 refetch Options 中无论是不是强制都给出相同的结果的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Relay Container 之间传递变量

使用 Relay Mutation 的结果作为 Relay Container Prop

react-apollo 中的 data.refetch() 函数如何工作

React Native & RTK Query - IsLoading on refetch 方法

作为道具传递时,graphql refetch 的类型是啥?

我想每 3 秒更新一次,而不使用 react apollo refetch