SoFunction
Updated on 2025-04-05

Technical implementation of using fetch to read local txt files in Vue

Basic concepts and functions

fetch API

fetchis a modern client HTTP request API used to get data from the server. It returns a Promise that can be used to handle asynchronous operations. Compared with traditionalXMLHttpRequestfetchMore concise and easy to use.

Local file reading

In a web application, reading a local file usually refers to reading content from a static file path on the server. Although the browser does not allow direct access to files on the user's computer, we can read files from the server via relative or absolute paths.

Technology implementation

Example 1: Basic fetch request

First, let's look at a simple example, usingfetchRead from local path.txtThe file and display its contents on the page.

<template>
  <div>
    <h1>File Content:</h1>
    <pre>{{ fileContent }}</pre>
  </div>
</template>

<script>
export default {
  data() {
    return {
      fileContent: ''
    };
  },
  created() {
    ();
  },
  methods: {
    async fetchFileContent() {
      try {
        const response = await fetch('/path/to/your/');
        if (!) {
          throw new Error(`HTTP error! status: ${}`);
        }
         = await ();
      } catch (error) {
        ('Error fetching the file:', error);
      }
    }
  }
}
</script>

Example 2: Handling asynchronous loading state

In practical applications, we usually need to deal with the status of asynchronous loading, such as displaying a load indicator or an error message.

<template>
  <div>
    <h1>File Content:</h1>
    <div v-if="loading">Loading...</div>
    <div v-if="error">{{ error }}</div>
    <pre v-if="fileContent">{{ fileContent }}</pre>
  </div>
</template>

<script>
export default {
  data() {
    return {
      fileContent: '',
      loading: false,
      error: null
    };
  },
  created() {
    ();
  },
  methods: {
    async fetchFileContent() {
       = true;
       = null;

      try {
        const response = await fetch('/path/to/your/');
        if (!) {
          throw new Error(`HTTP error! status: ${}`);
        }
         = await ();
      } catch (error) {
         = `Error fetching the file: ${}`;
      } finally {
         = false;
      }
    }
  }
}
</script>

Example 3: Use the life cycle hook

Lifecycle hooks of Vue components (such asmounted) is also a good time to perform asynchronous operations. We canmountedCalled in the hookfetchask.

<template>
  <div>
    <h1>File Content:</h1>
    <div v-if="loading">Loading...</div>
    <div v-if="error">{{ error }}</div>
    <pre v-if="fileContent">{{ fileContent }}</pre>
  </div>
</template>

<script>
export default {
  data() {
    return {
      fileContent: '',
      loading: false,
      error: null
    };
  },
  mounted() {
    ();
  },
  methods: {
    async fetchFileContent() {
       = true;
       = null;

      try {
        const response = await fetch('/path/to/your/');
        if (!) {
          throw new Error(`HTTP error! status: ${}`);
        }
         = await ();
      } catch (error) {
         = `Error fetching the file: ${}`;
      } finally {
         = false;
      }
    }
  }
}
</script>

Example 4: Read multiple files

Sometimes we need to read multiple files and merge their contents. We can process multiple processes in parallelfetchask.

<template>
  <div>
    <h1>Combined File Content:</h1>
    <div v-if="loading">Loading...</div>
    <div v-if="error">{{ error }}</div>
    <pre v-if="fileContent">{{ fileContent }}</pre>
  </div>
</template>

<script>
export default {
  data() {
    return {
      fileContent: '',
      loading: false,
      error: null
    };
  },
  mounted() {
    ();
  },
  methods: {
    async fetchMultipleFiles() {
       = true;
       = null;

      try {
        const fileUrls = ['/path/to/', '/path/to/'];
        const responses = await ((url => fetch(url)));
        const texts = await ((response => ()));
         = ('\n');
      } catch (error) {
         = `Error fetching the files: ${}`;
      } finally {
         = false;
      }
    }
  }
}
</script>

Example 5: Use Vuex to manage file content

In large applications, we may need to share file contents between multiple components. At this time, you can use Vuex to manage the file content and obtain it where needed.

store/

import { createStore } from 'vuex';

export default createStore({
  state: {
    fileContent: ''
  },
  mutations: {
    setFileContent(state, content) {
       = content;
    }
  },
  actions: {
    async fetchFileContent({ commit }) {
      try {
        const response = await fetch('/path/to/your/');
        if (!) {
          throw new Error(`HTTP error! status: ${}`);
        }
        const content = await ();
        commit('setFileContent', content);
      } catch (error) {
        ('Error fetching the file:', error);
      }
    }
  }
});

<template>
  <div>
    <h1>File Content:</h1>
    <pre>{{ fileContent }}</pre>
  </div>
</template>

<script>
import { useStore } from 'vuex';

export default {
  computed: {
    fileContent() {
      return this.$;
    }
  },
  mounted() {
    this.$('fetchFileContent');
  }
}
</script>

Some tips in actual work

In actual development, in addition to the above-mentioned technical implementation, there are some small tips that can help us better handle file reading requirements:

  • Error handling:existfetchAdd detailed error handling logic to the request to ensure that even if the request fails, it will not affect the user experience.
  • Cache mechanism: For frequently read files, you can consider using a caching mechanism to improve performance, such as using browser cache or state management in Vuex.
  • File path management: Centrally manage file paths to avoid hard coding, and facilitate post-maintenance and modification.
  • Asynchronous loading optimization: For content that needs to be displayed immediately, you can first display static content, and then load file content asynchronously in the background to improve the user experience.

The above is the detailed content of the technical implementation of using fetch to read local txt files in Vue. For more information about Vue fetch to read local txt, please pay attention to my other related articles!