2017-08-06 14 views
1

サーバが突然変異をサポートしていないため、突然変異を使用せずにローカルストアから「レコード」を削除する必要があります。アポロクライアントの突然変異なしストアからの削除

私は手動でそのようなストアにアクセスしようとしています:

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

これは、レコードを削除しますが、私はキャッシュがないように、それがサーバーに送らアイテムを取得するためにアポロを要求したとき。

代わりに、私はちょうどそのような原始的な特性の一つで更新削除するのであれば仕方によって、:

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

をその後、すべてがOKで、データが更新され、アポロは私がキャッシュに

を使い続けています私は突然変異を使用するはずであることを理解していますが、私はできません。あなたは正確な変数を知っていれば

stores { 
products { 
    totalCount 
    list { 
    } 
} 
} 

**::のクエリの

私は2ソリューションを発見しただけとlocalY

答えて

1

を更新する必要が**を

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]; 
関連する問題