【问题标题】:[Vue warn]: Property "myString" was accessed during render but is not defined on instance[Vue 警告]:在渲染期间访问了属性“myString”,但未在实例上定义
【发布时间】:2021-07-09 21:28:40
【问题描述】:

我使用 vuejs 的第 3 版。我正在尝试将登录用户名保存在我的 Login.vue 中。

作为第一步,我尝试使用名称“myString”保存输入字段的内容。

不幸的是,我收到错误消息:“[Vue 警告]:在渲染期间访问了属性“myString”,但未在实例上定义。”。

我做错了什么?

// Login.vue(重点部分)

<template>
  {{ myString }}

  <input v-model="string" type="text" name="myString">
  <p>
    <button @click="setString">Set String</button>
    <br>
    <br>
    <button @click="deleteString">Delete String</button>
  </p>
</template>

<script>
import router from "@/router";

export default {
  name: "Login",
  components: {
    Field,
    Form,
    ErrorMessage,
  },
  data() {
    return {
      string: "",
    };
  },
  watch: {},
  methods: {
    setString() {
      this.$store.commit("myString", this.string);
    },
    deleteString() {
      this.$store.commit("myString");
    },
  },
};
</script>

// ma​​in.js

"use strict";
//exports.__esModule = true;

import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
// import { createRouter, createWebHashHistory } from "vue-router";
import { createStore } from "vuex";

import createPersistedState from 'vuex-persistedstate';
import Cookies from 'js-cookie';

import SecureLS from "secure-ls";
const ls = new SecureLS({ isCompression: false });

const store = createStore({
  state() {
    return {
      count: 0,
      string: ""
    }
  },
  /*plugins: [createPersistedState({
    storage: {
      getItem: key => Cookies.get(key),
      setItem: (key, value) => Cookies.set(key, value, { expires: 3, secure: true }),
      removeItem: key => Cookies.remove(key)
    }
  })],*/
  plugins: [
    createPersistedState({
      storage: {
        getItem: key => ls.get(key),
        setItem: (key, value) => ls.set(key, value),
        removeItem: key => ls.remove(key)
      }
    })
  ],
  mutations: {
    increment(state){
      state.count++;
    },
    decrement: state => state.count--,
    myString: (state, value) => value ? (state.string = value) : (state.string = "")
  },
})

const app = createApp(App)
.use(store)
.use(router)
.mount("#app")

// App.vue

<template>
  <navigation />
</template>

<script>
import Navigation from "./components/Navigation";

export default {
  name: "App",
  components: {
    Navigation,
  },
};
</script>

【问题讨论】:

    标签: vue.js vuejs3 vuex4


    【解决方案1】:

    {{ myString }} 未定义。

    你可以得到带有计算属性的表单 Vuex

    computed: {
        mySting() {
            return this.$store.state.string
        }
    }
    

    【讨论】:

    • 感谢 @tauzN,我现在已将 myString: "", 添加到 Login.vue 中的数据中。我没有任何计算的经验。我在我的构造中究竟在哪里使用它?我还没有完全理解与我的代码交互的文档。 v3.vuejs.org/guide/…
    • @Julian 如果你正在使用组合 API check this out 这样做:myString: computed(() =&gt; store.state.string)
    • 感谢@tauzN,它有效!我在 Login.vue 和设置部分添加import { computed } from 'vue'; import * as vuex from 'vuex': setup () { const store = vuex.useStore() return { myString: computed(() => store.state.string) } },
    猜你喜欢
    • 2021-12-23
    • 2021-11-14
    • 2021-12-28
    • 2022-01-12
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多