Vue.js/Vuex 登录:[vuex] 未知操作类型:postLogin。

Posted

技术标签:

【中文标题】Vue.js/Vuex 登录:[vuex] 未知操作类型:postLogin。【英文标题】:Vue.js/Vuex Login: [vuex] unknown action type: postLogin. 【发布时间】:2019-03-13 13:13:42 【问题描述】:

我对 Vuejs 相当陌生,但对 Vuex 更是如此——我了解 Vue 和 Vuex 的基础知识。我正在努力让我的登录工作。这是我得到的错误:

[vuex] unknown action type: postLogin. 

我想成功点击api。我已经在后端创建了用户(使用 django)。所以我可以通过管理门户登录。尝试通过 apis/axios 使用 vue 前端登录。

这里有我的 component.vue 代码:

             <v-card-text>
               <v-form @submit.prevent="postLogin(email, password)">
                 <v-text-field v-model="email" prepend-icon="person" name="login" label="Login" type="text"></v-text-field>
                 <v-text-field v-model="password" prepend-icon="lock" name="password" label="Password" id="password" type="password"></v-text-field>
                 <v-card-actions>
                   <v-spacer></v-spacer>
                   <v-btn type ='submit' color="primary">Login</v-btn>
                 </v-card-actions>
               </v-form>
             </v-card-text>

这是我的 auth.js 存储操作:

const actions = 
  postLogin (context, payload) 
    return axios.post('/api/users/login/', payload)
      .then(response => )
      .catch(e => 
        context.commit('setAuthError', true)
        console.log(e)
      )
  ,

这是我尝试调用该操作的组件脚本:

<script>
import postLogin from '@/store/modules/auth'

  export default 
    data: () => (
      drawer: null,
      email: '',
      password: ''
    ),
    props: 
      source: String
    ,
    methods: 
      postLogin (email,password) 
        this.$store
          .dispatch('postLogin', email, password).then(()=> this.$router.push(name: 'dashboard'))
      
    
  
</script>

我已经尝试了一切,请帮助我。

【问题讨论】:

现在发生了什么,你真正想要发生什么? 这是我得到的错误:[vuex] unknown action type: postLogin.我想成功命中api。我已经在后端创建了用户(使用 django)。所以我可以通过管理门户登录。尝试通过 apis/axios 使用 vue 前端登录。 请分享您的商店代码 调度调用和操作似乎是正确的(除了你的逻辑),所以我觉得你没有正确设置 Vuex。 @boussadjrabrahim 我的商店代码在 auth.js 下的问题中。 【参考方案1】:

您的vuex 似乎正在使用模块。如果您使用它们设置namespacing(即,您在模块中声明namespaced: true),那么您的action 不再位于全局命名空间中。您必须调整您的代码以发送到auth/postLogin

this.$store .dispatch('auth/postLogin', email, password) .then(() => this.$router.push(name: 'dashboard'));

假设当您将此命名空间模块注册到您的root 存储区时,上述内容将起作用,您还将其命名为auth。如果您将其命名为其他名称,则必须相应地调整您的 dispatch() 调用:

// inside your src/store/index.js
import auth from './modules/auth';

...
const store = new Vuex.Store(
  ...
  modules: 
    auth,        // <-- call dispatch('auth/postLogin', email, password)
    auth: auth,  // <-- call dispatch('auth/postLogin', email, password)
    authen: auth // <-- call dispatch('authen/postLogin', email, password)
  
);

【讨论】:

非常感谢!事实证明,我有一个 index.js 和一个 store.js,这在应用程序中造成了歧义。 @WernerKotze 我明白了。很高兴你把它整理出来。 :)

以上是关于Vue.js/Vuex 登录:[vuex] 未知操作类型:postLogin。的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js:vuex 操作中未捕获的承诺

Vue.js- Vuex 更新数组中的对象,内部状态未反映在组件 DOM 中

Vue.js[vuex] 如何从突变中调度?

Vue.js / Vuex + axios 发送多个 PUT 请求

Vue.js、Vuex 与 Promises

javascript Vue Js Vuex行动