web-dev-qa-db-ja.com

Reactネイティブ-キャッシュされたフェッチ呼び出し

私は、サーバーからの最新の情報に依存するフェッチ呼び出しを行う、reactネイティブでアプリを構築しています。私はそれが応答をキャッシュしているように見えることに気づきました、そして私がそのフェッチ呼び出しを再度実行すると、私のサーバーからの新しい情報ではなくキャッシュされた応答を返します。

私の機能は次のとおりです。

goToAll() {
  AsyncStorage.getItem('FBId')
    .then((value) => {
      api.loadCurrentUser(value)
        .then((res) => {
          api.loadContent(res['RegisteredUser']['id'])
            .then((res2) => {
              console.log(res2);
              this.props.navigator.Push({
                component: ContentList,
                title: 'All',
                passProps: {
              content: res2,
            user: res['RegisteredUser']['id']
          }
        })
      });
    });
  })
  .catch((error) => {console.log(error);})
  .done();
}

そして、api.js im呼び出しからの関数は次のとおりです:

loadContent(userid){
  let url = `http://####.com/api/loadContent?User_id=${userid}`;
  return fetch(url).then((response) => response.json());
}
26
Andrew Ives

Headerを設定して、リクエストがキャッシュされないようにすることができます。以下の例:

return fetch(url, {
  headers: {
    'Cache-Control': 'no-cache'
  }
}).then(function (res) {
  return res.json();
}).catch(function(error) {
  console.warn('Request Failed: ', error);
});
45
manosim

Manosimの答えは私にとってはうまくいきませんでしたが、-didが機能するソリューションへの道に私を導きました:

fetch(url, {
  headers: {
    'Cache-Control': 'no-cache, no-store, must-revalidate',
    'Pragma': 'no-cache',
    'Expires': 0
  }
})

これはそれを釘付けにした。

15
lance.dolan

(jsではなく)clojurescriptを使用してフェッチネイティブ(Android)とフェッチで同様の問題がありました。 :cache "no-store"(ヘッダーにはありません)を追加すると、動作が停止しました(Android Appでのフェッチデータのキャッシュ)。

私はjsのコードは次のようになるはずだと思います:

fetch(url, {'cache':'no-store'})

specs fetch cache-mode

0
fgui