首页 > 解决方案 > 使用 asyncData/fetch 进行验证 - 从 Validate 中提交数据?

问题描述

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

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

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

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

本质上复制了相同的 API 请求,但来自操作内部:

async fetch ({ params, store }) {
  await store.dispatch('card/getCard', params.card)
}

标签: vue.jsnuxt.js

解决方案


推荐阅读