Самым легким способом для тестирования будет установить с нуля Nuxt.js с отмеченными галочками Vuex и Axios.
После установки создайте файл с любым названием и разрешением js в директории store. В моем случае файл называется newspaper.js
export const state = () => ({ posts: {} }) export const mutations = { updatePosts (state, posts) { state.posts = posts } } export const actions = { async fetchPosts ({ commit }) { // Пытаемся получить посты с LocalStorage let posts = JSON.parse(localStorage.getItem('posts')) // Если посты получены if (posts) { // Обновляем переменную posts в store для тех кто не видит, где функция updatePosts она выше commit('updatePosts', posts) // В else попадаем только в первый раз } else { // Url API для примера был взят API WordPress демо шаблона Newspaper let apiUrl = 'https://demo.tagdiv.com/newspaper_pro/wp-json/wp/v2/posts/' // Axios await this.$axios.get(apiUrl).then(response => { // Формируем структуру постов let posts = response.data.map(post => ({ id: post.id, title: post.title.rendered, excerpt: post.excerpt.rendered })) // заносим посты в localStorage localStorage.setItem('posts', JSON.stringify(posts)) // Обновляем переменную posts в store для тех кто не видит, где функция updatePosts она выше commit('updatePosts', posts) }) } } } export const getters = { // Этой функцией будем дергать наши посты в компонентах getPosts (state) { return state.posts } }
Создайте тестовую страницу test.vue в директории pages и добавьте следующий код:
<template> <div> <!-- Получаем посты используя getter getPosts --> <div class="post" v-for="post in getPosts" :key="post.id"> <h2 v-html="post.title"></h2> <div v-html="post.excerpt"></div> </div> </div> </template> <script> // Получаем функции getters и actions с созданного модуля newspaper import { mapGetters, mapActions } from 'vuex' export default { name: 'test', // Запускаем API в модуле newspaper methods: { ...mapActions('newspaper', [ 'fetchPosts' ]) }, async mounted () { this.fetchPosts() }, // Запускаем getter getPosts в модуле newspaper computed: { ...mapGetters('newspaper', [ 'getPosts' ]) } } </script> <style scoped> h2 { font-size: 26px; margin-bottom: 10px; } .post { margin-bottom: 20px; border: 1px solid #ddd; padding: 20px; } </style>
Пересобираем проект командой
yarn dev
Заходим по адресу
http://localhost:3000/test
Спасибо Полезный урок