@krisdayer

Как правильно запустить action во Vuex?

Хочу вывести на страничку список постов с https://jsonplaceholder.typicode.com/posts, но не получается. Они просто не выводятся и нет ошибок в консоли.

Притом, если попытаться передать значение в actions через this.fetchPosts(значение)(чтобы подставить его в limit) , то это выдаёт ошибку в консоли "Error in mounted hook (Promise/async): "TypeError: _this.fetchPosts is not a function"". Без этого других ошибок нет.

Если просто скопировать с сайта и вставить в state.allPosts, то всё работает и посты выводятся.

Код

// index.pug

body
		#app
			view-posts
/code>

// Главный js файл: index.js

<code lang="javascript">
import './js/common.js'
import './assets/css/main.css'
import './assets/scss/main.scss'
import regeneratorRuntime from "regenerator-runtime"


window.Vue = require('vue')
import store from './store'

Vue.component('view-posts', require('./components/posts.vue').default)

const app = new Vue({
	store,
	el: '#app'
});
</code>

// Компонент Vue: posts.vue

<code>
<template lang="pug">
	div
		h1.title {{ getPostsCount }} posts
		.post(v-for="post in getPosts" :key="post.id")
			h2 {{post.title}}
			p {{post.body}}
</template>
</code>

<code lang="javascript">
<script>
import {mapGetters, mapActions} from 'vuex';
export default {
	computed: mapGetters(["getPosts", "getPostsCount"]),
	method: mapActions(['fetchPosts']),
	async mounted() {this.fetchPosts} // Здесь я также пытаюсь передать значение в actions через this.fetchPosts(значение) , но это выдаёт ошибку в консоли "Error in mounted hook (Promise/async): "TypeError: _this.fetchPosts is not a function""
}
</script>
</code>

// Vuex store

// Index.js

<code lang="javascript">
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

import posts from './modules/posts'

export default new Vuex.Store({
  modules: {
    posts,
	}
})
</code>

//Posts.js

<code lang="javascript">
export default {
	state: {
		allPosts: []
	},
	actions: {
		async fetchPosts(ctx, limit = 5) { // в limit хочу передавать значение из vue
			const res = await fetch('https://jsonplaceholder.typicode.com/posts&_limit=' + limit);
			const posts = await res.json();
			ctx.commit('mutatePosts', posts)
		}
	},
	mutations: {
		mutatePosts(state, posts) {
			state.allPosts = posts
		}
	},
	getters: {
		getPosts(state) {
			return state.allPosts
		},
		getPostsCount(state) {
			return state.allPosts.length
		}
	}
}
</code>
</spoiler>
  • Вопрос задан
  • 454 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега Vue.js
method: mapActions(['fetchPosts']),

methods

Вот же позорище.
Ответ написан
@caesarisme
Нейрон в нейросети
method на methods поменяй
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы