2017-08-06 38 views
1

我需要从本地存储的ID不使用突变,因为服务器不支持突变删除“记录”。阿波罗客户从存储库中删除无突变

我试图手动访问商店这样的:

delete this.apolloClient.store.getState().apollo.data['1112'] 

这个删除记录,但是当我问阿波罗取水的时候去到服务器上,像没有缓存的项目。

顺便说一下,如果不是删除我刚刚更新的基本属性类似的一个:

this.apolloClient.store.getState().apollo.data['1112'].name = 'XXX' 

那么一切都OK,数据更新和Apollo使用缓存

我一直明白我应该使用突变,但我不能。

我只需要更新localy

回答

1

我已经找到2个解决方案:对于查询

stores { 
products { 
    totalCount 
    list { 
    } 
} 
} 

**,如果你知道确切的变量:**

const query = gql(query); 
    const data = apolloClient.readQuery({ query, variables:{limit:100, offset: 0} }); 

    let removedProduct = _.remove(data.stores.products.list, function(product: IProduct) { return product.id === productId; }) 
    data.stores.products.totalCount = data.stores.products.list.length; 

    apolloClient.writeQuery({ 
     query, 
     variables:{limit:100, offset: 0}, 
     data: data 
    }); 

如果你想要清除无处不在

let dataStore = apolloClient.store.getState().apollo.data; 
    let productsStore = dataStore[dataStore['ROOT_QUERY'].stores.id]; 
    let product = dataStore[productId]; 

    //remove product from cache index 
    Object.keys(productsStore) 
     .map((key: any) => dataStore[productsStore[key].id]) 
     .forEach((products: any) => { 
      _.remove(products.list, (product) => product.id === productId); 
      products.totalCount = products.list.length; 
     }); 

    //remove product's complex fields (array/objects) from cache 
    Object.keys(product).map((key: any) => { 
     if (Array.isArray(product[key])) { 
      return product[key].map((item) => item.id); 
     } else if (typeof product[key] === 'object') { 
      return product[key].id; 
     } 
     return null; 
    }).forEach((productField) => { 
     if (Array.isArray(productField)) { 
      productField.forEach((key) => delete dataStore[key]); 
     } else if (productField) { 
      delete dataStore[productField]; 
     } 
    }); 

    //remove product from cache 
    delete dataStore[productId]; 
相关问题