使用 asyncData/fetch 进行验证 - 在 Validate 中提交数据?

Mic*_*ael 5 vue.js nuxt.js

如果我想验证动态资源是否存在,Nuxt建议validate()在页面组件中实现调用。如果该调用执行数据的 API 请求以验证资源的存在,Nuxt 文档说明我可以检查 Vuex 存储,但没有明确说明我可以dispatch执行操作以commit获取 API 请求接收的数据。store该范围内validate()的方法允许调用dispatch与Vuex店就如同和同步asyncDatafetch,但是这会是一个反模式-从内部数据提交给Vuex validate()

例如,您还可以检查商店中的一些数据(在操作之前由 nuxtServerInit 填充

commit从内部获取数据的需求validate()将防止在同一资源内asyncDatafetch对同一资源进行重复的 API 调用。例如,如果我调用validate()请求一个资源的存在并且我没有commit将该资源的数据发送给 Vuex,我可能需要再次从asyncData或请求该资源数据fetch

validate ({ app, params, store }) {
  return app.$axios.get('client/cards', {params: { slug: params.card }})
    .then(() => true)
    .catch(() => false)
}
Run Code Online (Sandbox Code Playgroud)

本质上是复制相同的 API 请求,但在操作中:

async fetch ({ params, store }) {
  await store.dispatch('card/getCard', params.card)
}
Run Code Online (Sandbox Code Playgroud)