diff --git a/app/assets/javascripts/snippets/components/snippet_blob_view.vue b/app/assets/javascripts/snippets/components/snippet_blob_view.vue
index 27b3a30b40a9face3f5279c63f1a0da32dd23cfe..8481ac2b9c916e5715e1f0950399cdc12ba8d4c9 100644
--- a/app/assets/javascripts/snippets/components/snippet_blob_view.vue
+++ b/app/assets/javascripts/snippets/components/snippet_blob_view.vue
@@ -29,15 +29,6 @@ export default {
       update(data) {
         return this.onContentUpdate(data);
       },
-      result() {
-        if (this.activeViewerType === RICH_BLOB_VIEWER) {
-          // eslint-disable-next-line vue/no-mutating-props
-          this.blob.richViewer.renderError = null;
-        } else {
-          // eslint-disable-next-line vue/no-mutating-props
-          this.blob.simpleViewer.renderError = null;
-        }
-      },
       skip() {
         return this.viewer.renderError;
       },
diff --git a/app/assets/javascripts/snippets/index.js b/app/assets/javascripts/snippets/index.js
index 789332ce5b772dd6b74130ee13c878b5a4fea8ac..576bfe8756112fefb6a1b26a4f92d0b949fb0335 100644
--- a/app/assets/javascripts/snippets/index.js
+++ b/app/assets/javascripts/snippets/index.js
@@ -14,7 +14,13 @@ export default function appFactory(el, Component) {
   }
 
   const apolloProvider = new VueApollo({
-    defaultClient: createDefaultClient({}, { batchMax: 1 }),
+    defaultClient: createDefaultClient(
+      {},
+      {
+        batchMax: 1,
+        assumeImmutableResults: true,
+      },
+    ),
   });
 
   const {
diff --git a/app/assets/javascripts/snippets/mixins/snippets.js b/app/assets/javascripts/snippets/mixins/snippets.js
index 7552eae97fcce92f5e961c3c71575391a58d6943..b72befef56b6524ac9e2986c83892ded9042a4be 100644
--- a/app/assets/javascripts/snippets/mixins/snippets.js
+++ b/app/assets/javascripts/snippets/mixins/snippets.js
@@ -1,3 +1,4 @@
+import { isEmpty } from 'lodash';
 import GetSnippetQuery from 'shared_queries/snippet/snippet.query.graphql';
 
 const blobsDefault = [];
@@ -12,20 +13,18 @@ export const getSnippetMixin = {
         };
       },
       update(data) {
-        const res = data.snippets.nodes[0];
+        const res = { ...data.snippets.nodes[0] };
 
         // Set `snippet.blobs` since some child components are coupled to this.
-        if (res) {
+        if (!isEmpty(res)) {
           // It's possible for us to not get any blobs in a response.
           // In this case, we should default to current blobs.
-          res.blobs = res.blobs ? res.blobs.nodes : this.blobs;
+          res.blobs = res.blobs ? res.blobs.nodes : blobsDefault;
+          res.description = res.description || '';
         }
 
         return res;
       },
-      result(res) {
-        this.blobs = res.data.snippets.nodes[0]?.blobs || blobsDefault;
-      },
       skip() {
         return this.newSnippet;
       },
@@ -41,12 +40,14 @@ export const getSnippetMixin = {
     return {
       snippet: {},
       newSnippet: !this.snippetGid,
-      blobs: blobsDefault,
     };
   },
   computed: {
     isLoading() {
       return this.$apollo.queries.snippet.loading;
     },
+    blobs() {
+      return this.snippet?.blobs || [];
+    },
   },
 };
diff --git a/spec/frontend/snippets/components/show_spec.js b/spec/frontend/snippets/components/show_spec.js
index e6162c6aad2c8c30d6f2504604f99ccf31b59222..b7b638b5137f62f6bac9b6f88d4923b2aa50c893 100644
--- a/spec/frontend/snippets/components/show_spec.js
+++ b/spec/frontend/snippets/components/show_spec.js
@@ -71,7 +71,9 @@ describe('Snippet view app', () => {
   it('renders correct snippet-blob components', () => {
     createComponent({
       data: {
-        blobs: [Blob, BinaryBlob],
+        snippet: {
+          blobs: [Blob, BinaryBlob],
+        },
       },
     });
     const blobs = wrapper.findAll(SnippetBlob);