如何正确使用 vuex store?
How Do I correctly use vuex store?
我正在尝试以下操作:
我有一个使用 axios 从休息中获取结果的登录表单 api。当提交正确的数据时,我会返回所有用户数据,当提交错误的数据时,我会收到错误消息。
我想将用户数据保存到全局存储中,以便在我的 vue 应用程序中使用。我认为 vuex 可以用于这个场景。
在我的 main.js 中,我定义了 vuex 和一个变异函数来获取用户数据。
import { createStore } from 'vuex'
// other imports
const store = createStore({
state () {
return {
userData: {}
}
},
mutations: {
addUserData (state, data) {
state.userData = data
}
}
})
createApp(App)
.use(router, store)
.mount('#app')
在我的 Login.vue 中,我正在尝试使用我之前创建的商店:
但是,当尝试对商店 addUserData
使用变更时,我在控制台中得到了 Uncaught (in promise) ReferenceError: store is not defined
。我现在如何正确使用该功能?
我也试过使用 this.$store.state.addUserData
,结果出现了不同的错误
<template>
<div class="container content">
<h1>Login</h1>
<form @submit.prevent="login">
<div class="mb-3">
<label for="username" class="form-label">Username:</label>
<input type="username" id="username" v-model="username" class="form-control" placeholder="Username">
</div>
<div class="mb-3">
<label for="password" class="form-label">Password:</label>
<input type="password" id="password" v-model="password" class="form-control" placeholder="•••••••">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</template>
<script>
import axios from 'axios'
export default {
data(){
return {
username: '',
password: '',
}
},
methods: {
async login() {
axios.get('https://localhost:9443/isValidUser',
{
params: {
user: this.username,
pass: this.password,
}
}).then(response => {
console.log(response.data)
if(response.data[0].username) {
console.log("Hello " + response.data[0].username)
store.commit('addUserData', response.data[0])
} else {
console.log("Login failed")
}
})
}
}
}
</script>
我“一次”使用多个插件的解决方案是:
const app = createApp(App)
[store, router].forEach((p) => app.use(p));
app.mount('#app);
如果你有很多插件,它会很方便,如果没有,你可以随时做:
createApp(App)
.use(router)
.use(store)
.mount('#app')
两个插件就可以了
所以最后你的商店没有被使用,因此错误
我正在尝试以下操作:
我有一个使用 axios 从休息中获取结果的登录表单 api。当提交正确的数据时,我会返回所有用户数据,当提交错误的数据时,我会收到错误消息。
我想将用户数据保存到全局存储中,以便在我的 vue 应用程序中使用。我认为 vuex 可以用于这个场景。
在我的 main.js 中,我定义了 vuex 和一个变异函数来获取用户数据。
import { createStore } from 'vuex'
// other imports
const store = createStore({
state () {
return {
userData: {}
}
},
mutations: {
addUserData (state, data) {
state.userData = data
}
}
})
createApp(App)
.use(router, store)
.mount('#app')
在我的 Login.vue 中,我正在尝试使用我之前创建的商店:
但是,当尝试对商店 addUserData
使用变更时,我在控制台中得到了 Uncaught (in promise) ReferenceError: store is not defined
。我现在如何正确使用该功能?
我也试过使用 this.$store.state.addUserData
,结果出现了不同的错误
<template>
<div class="container content">
<h1>Login</h1>
<form @submit.prevent="login">
<div class="mb-3">
<label for="username" class="form-label">Username:</label>
<input type="username" id="username" v-model="username" class="form-control" placeholder="Username">
</div>
<div class="mb-3">
<label for="password" class="form-label">Password:</label>
<input type="password" id="password" v-model="password" class="form-control" placeholder="•••••••">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</template>
<script>
import axios from 'axios'
export default {
data(){
return {
username: '',
password: '',
}
},
methods: {
async login() {
axios.get('https://localhost:9443/isValidUser',
{
params: {
user: this.username,
pass: this.password,
}
}).then(response => {
console.log(response.data)
if(response.data[0].username) {
console.log("Hello " + response.data[0].username)
store.commit('addUserData', response.data[0])
} else {
console.log("Login failed")
}
})
}
}
}
</script>
我“一次”使用多个插件的解决方案是:
const app = createApp(App)
[store, router].forEach((p) => app.use(p));
app.mount('#app);
如果你有很多插件,它会很方便,如果没有,你可以随时做:
createApp(App)
.use(router)
.use(store)
.mount('#app')
两个插件就可以了
所以最后你的商店没有被使用,因此错误