如何在 Vuex 状态下访问 nuxt `$config`?只有访问方法是通过存储操作方法吗?
How to access nuxt `$config` in Vuex state? Only access method is through store actions methods?
我已经习惯了dotenv库来使用.env文件,但是我不得不更改runtimeConfig,因为我意识到很容易暴露我的项目密钥。
在我最近的项目中,我使用了nuxt "^2.14" 模式是SPA。
所以我只在 nuxt.config.ts 中使用“publicRuntimeConfig”。
.env
Test_BASE_URL:'https://test.org'
nuxt.config.ts
export default {
publicRuntimeConfig:{baseURL: proccess.env.Test_BASE_URL||''}
}
我可以像在 vue 文件中那样使用 env。
sample.vue
<script>
export default {
mounted(){
console.log(this.$config.baseURL)
}
}
</script>
但我无法在商店状态下使用“$config”。
我试着写那个,但它总是 return “undefied”
index.ts
export const state = (context) => ({
url:context.$config
})
我已经提到了这些人
并通过 actions 方法更改状态的值。
我用过SPA,所以我把像'nuxtServerInit'这样的方法作为插件。
plugins/clientInit.ts
import {Context} from "@nuxt/types";
export default function (context:Context) {
context.store.dispatch('initEnvURL',context.$config)
}
index.ts
interface State {
testURL: string
}
const state = () => ({
testURL:''
})
const mutations = {
setTestURl(state:State,config:any) {
state.testURL = config.baseURL
}
const actions = {
initEnvURL({commit},$config) {
commit('setTestURl',$config)
}
}
export default {state,mutations,actions}
我通过上面的动作方法成功改变了状态值,
但我不知道为什么“上下文”不能直接使用 store/state 对象。
有谁知道如何在 store/state 中使用 $config?
还是不可能通过上述操作方法使用 $config 的唯一方法?
那是因为在 Vuex 中,实际上只有操作接收到应用程序上下文。
State、Mutations 和 Getters 无法按设计访问它。
您的初始状态应该是无上下文的,即具有不依赖于运行时执行的值。
突变是无状态的,它们只是接受一个参数并更新状态。就这样。上下文参数应该来自调用者。
Getter 只是反应式状态转换,不应依赖于上下文属性,否则会扰乱 Vuex 模块状态。
所以,是的,您必须在 nuxtServerInit
操作(或从 SPA 应用程序的插件)中初始化您的商店:
nuxtServerInit({ store, config } ) {
store.commit('UPDATE_BASE_URL', config.baseUrl)
}
我已经习惯了dotenv库来使用.env文件,但是我不得不更改runtimeConfig,因为我意识到很容易暴露我的项目密钥。
在我最近的项目中,我使用了nuxt "^2.14" 模式是SPA。 所以我只在 nuxt.config.ts 中使用“publicRuntimeConfig”。
.env
Test_BASE_URL:'https://test.org'
nuxt.config.ts
export default {
publicRuntimeConfig:{baseURL: proccess.env.Test_BASE_URL||''}
}
我可以像在 vue 文件中那样使用 env。
sample.vue
<script>
export default {
mounted(){
console.log(this.$config.baseURL)
}
}
</script>
但我无法在商店状态下使用“$config”。 我试着写那个,但它总是 return “undefied”
index.ts
export const state = (context) => ({
url:context.$config
})
我已经提到了这些人
plugins/clientInit.ts
import {Context} from "@nuxt/types";
export default function (context:Context) {
context.store.dispatch('initEnvURL',context.$config)
}
index.ts
interface State {
testURL: string
}
const state = () => ({
testURL:''
})
const mutations = {
setTestURl(state:State,config:any) {
state.testURL = config.baseURL
}
const actions = {
initEnvURL({commit},$config) {
commit('setTestURl',$config)
}
}
export default {state,mutations,actions}
我通过上面的动作方法成功改变了状态值, 但我不知道为什么“上下文”不能直接使用 store/state 对象。 有谁知道如何在 store/state 中使用 $config? 还是不可能通过上述操作方法使用 $config 的唯一方法?
那是因为在 Vuex 中,实际上只有操作接收到应用程序上下文。 State、Mutations 和 Getters 无法按设计访问它。
您的初始状态应该是无上下文的,即具有不依赖于运行时执行的值。
突变是无状态的,它们只是接受一个参数并更新状态。就这样。上下文参数应该来自调用者。
Getter 只是反应式状态转换,不应依赖于上下文属性,否则会扰乱 Vuex 模块状态。
所以,是的,您必须在 nuxtServerInit
操作(或从 SPA 应用程序的插件)中初始化您的商店:
nuxtServerInit({ store, config } ) {
store.commit('UPDATE_BASE_URL', config.baseUrl)
}