【发布时间】:2021-03-07 17:52:36
【问题描述】:
我的目标是从 vue 前端验证用户的凭据,获取他们的数据,将数据存储在全局可用的变量中,并在任何组件中使用它们。经过一些工作,我可以将 Vue 的 reactive() 方法与 inject 和 provide 一起使用。这是我当前的代码:
在 store/index.js
import { reactive, inject } from 'vue'
// global states
export const stateSymbol = Symbol('state')
export const createState = () => reactive({
backendRoute: 'http://127.0.0.1:8000/',
currentUser: {},
logIn: userData => {
let user = createState.currentUser
user = userData
console.log(user)
}
})
export const useState = () => inject(stateSymbol)
然后在 main.js
import { createApp } from 'vue'
import App from './App.vue'
// store modules
import { stateSymbol, createState } from './store'
// create app
const app = createApp(App)
app.provide(stateSymbol, createState())
然后在名为Login.vue
的登录/注册组件中import { useState } from "../store"
import axios from 'axios'
export default {
name: 'RegisterLogin',
setup() {
let state = useState()
axios.get(getUser, jwtConfig).then(response => {
userId = response.data.id
const currentUser = getUserProfile+userId // URL
console.log(currentUser)
const getCurrentUser = axios.get(currentUser, jwtConfig)
getCurrentUser.then(response => {
state.logIn(response.data)
console.log(state.currentUser)
})
})
}
}
store/index.js 中的 console.log(user) 按预期记录userData。我相信,createState.currentUser 应该被改变。然而问题是console.log(state.currentUser) 记录了一个空的代理对象。另外,如果我尝试从 Home.vue 等其他组件访问 state.currentUser:
<template>
{{ state.currentUser }}
</template>
<script>
import { useState } from '../store/'
export default {
name: 'Index',
setup() {
return {
state: useState(),
}
},
}
</script>
...即使用户成功登录,也始终显示一个空对象。有什么我做错了吗?感谢您的帮助(提前)。
【问题讨论】:
标签: vuejs3 vue-composition-api vue-reactivity