- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我现在正在学习 vuex,但我陷入了映射功能,例如 import { mapGetters } from 'vuex';
在我的状态下,我有一个名为 users 的对象,我在其中保存用户数据,稍后将添加 addNewUser 功能来扩展用户对象。但对于这个测试用例,我刚刚创建了一个名为“John”的虚拟用户:
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
users: [
{
userName: 'John',
income: 2000,
leftover: 0
}
]
},
getters: {
user: state => {
return state.users;
},
},
mutations: {},
actions: {
addNewUser(userName, income) {
console.log(userName, income, 'from vuex');
}
},
modules: {}
});
在我这样做之前,我简单地使用 this.$store.state.users
调用 john,然后使用 forEach 迭代 userNames
。但发现这不是最好的方法。
我怎样才能获取用户的状态数据,并像以前一样在 forEach 循环中将它们打印出来?
在第 129 行 loadAllUsers()
中,您可以看到我实现此目的的旧方法:
<template>
<div
id="user-modal"
class="modal fade"
tabindex="-1"
role="dialog"
aria-hidden="true"
>
<div
class="modal-dialog modal-dialog-centered"
role="document"
>
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">
Settings
</h5>
<button
type="button"
class="close"
data-dismiss="modal"
aria-label="Close"
>
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<!-- List all Users -->
<div
id="users-list"
class="mb-3"
>
<h5>Users:</h5>
<ul class="list-group">
<li
v-for="user in userList"
:key="user.userName"
class="list-group-item"
>
{{ user.userName }}
</li>
</ul>
</div>
<!-- Add New Users -->
<h5>Add New User:</h5>
<div class="input-group mb-1">
<div class="input-group-prepend">
<span
id="basic-addon1"
class="input-group-text"
>
<i class="fas fa-user" />
</span>
</div>
<input
v-model="userNameInput"
type="text"
class="form-control"
placeholder="Username"
>
</div>
<div class="input-group">
<div class="input-group-prepend">
<span
id="basic-addon1"
class="input-group-text"
>
<i class="far fa-money-bill-alt" />
</span>
</div>
<input
v-model="userIncomeInput"
type="number"
class="form-control"
placeholder="Income"
>
</div>
</div>
<div class="modal-footer">
<button
type="button"
class="btn btn-secondary"
data-dismiss="modal"
>
Close
</button>
<button
type="button"
class="btn btn-primary"
@click="createNewUser"
>
Save changes
</button>
</div>
</div>
</div>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
// import { mapActions } from 'vuex';
export default {
data() {
return {
userNameInput: '',
userIncomeInput: '',
userList: []
};
},
computed: {
...mapGetters(['user']),
printUserTest(user) {
return user;
}
},
created: function() {
this.loadAllUsers();
},
methods: {
// ...mapActions({
// addNewUser: 'addNewUser'
// }),
loadAllUsers() {
let allUsers = this.$store.state.users;
allUsers.forEach(user => {
this.userList.push({ userName: user.userName });
});
// },
// createNewUser() {
// let userName = this.userNameInput;
// let userIncome = this.userIncomeInput;
// console.log(userName, userIncome);
// }
}
}
};
</script>
<style lang="scss">
#user-modal {
color: $black;
.input-group-text {
width: 46px;
}
}
</style>
最佳答案
通过 mapGetters
,您可以将商店中的用户
映射到计算用户。这将是 react 性的。
所以您甚至不需要加载用户。
Vue.config.devtools = false;
Vue.config.productionTip = false;
const store = new Vuex.Store({
state: {
users: [{
userName: 'John',
income: 2000,
leftover: 0
}]
},
getters: {
users: state => {
return state.users;
},
}
})
var app = new Vue({
el: '#app',
store,
computed: {
...Vuex.mapGetters(["users"]),
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<script src="https://unpkg.com/vuex@3.1.2/dist/vuex.js"></script>
<div id="app">
<div v-for="user in users">
{{ user.userName }}
</div>
</div>
<div>
关于javascript - 使用 vuex mapGetters 迭代用户的状态 obj,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60391680/
我刚刚开始使用 Vuex,但遇到了问题(这可能是我的一些无能为力的语法错误)。我有一个用户喜欢 like_items 并且有一个网络调用,它与一个项目不同。 mutations: { SET_TOGG
我刚开始在这里学习 Vuex。到目前为止,我一直将共享数据存储在 store.js 中。文件和导入store在每个模块中,但这越来越烦人,我担心会发生变异。 我正在努力解决的是如何使用 Vuex 从
我正在创建一个使用 Fabric.js 来管理 Canvas 的 Vue 应用程序。 我想使用 Vuex 管理 Canvas 状态。为此,我将 fabric canvas 实例设置为 vuex 状态变
我正在构建一个 Nuxt 应用程序,我正在从我在本地主机上运行的节点后端获取一些数据。 我有一个插件 getApps.js export default ({ store }) => { st
我想安装 Vuex 但出现错误。 // error npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree
我使用 vuex-persistedstate 包( https://github.com/robinvdvleuten/vuex-persistedstate )在浏览器上保持数据状态。 我使用 A
假设我有一个简单的 Vuex 状态来保存食谱: const state = { recipe: { id: '', name: "", ingr
目前,我有一个具有 2 个状态属性的商店 - 版本和冠军 + 2 个发出 GET 请求然后提交到状态的操作。第二个 GET 请求 URL 需要包含我从第一个 GET 请求获取的版本,如下所示: axi
我有一个基于 Vue 和 Vuex 的小应用程序。它只是一个包含类似项目的表格 {{ item.name }} Edit Items 数组是使用 getter 从
我有一个 Vuex getter,我从应用程序中的各个组件调用它。但是,我发现在调用 getter 之前需要稍微复杂一些的逻辑,所以我使用了 Vuex Action。如何使用操作中的参数调用 gett
为什么会出现此错误: Error [vuex] Do not mutate vuex store state outside mutation handlers. 这是什么意思? 当我尝试输入编辑输入
在 Nuxt 文档(here)中,它说“您可以选择将模块文件分解为单独的文件:state.js、actions.js、mutations.js 和 getters.js。” 我似乎找不到任何示例来说明
我正在使用 TypeScript 构建一个简单的 vue 项目。我在我的 vue 项目中编写了 vuex 商店,该商店有一个名为“计算”的子模块。但是一旦创建了包含子模块的主存储,就会发生奇怪的错误(
我完全熟悉 Vuex,但我对 Vue 组合 API 一无所知。这到底是怎么回事,它和Vuex有什么区别?它涵盖了 Vuex 中的哪些差距,以及何时何地使用它们更好? 感谢您的帮助。 最佳答案 首先,
简短的问题:是否可以通过 Nuxt Auth 模块手动更新 Vuex 中的用户数据? 为什么我有这个问题:我的问题是这个。我在用户文档中的 MongoDB 中保存了一些 Likes/Follows。我
尝试将带有 vuex-module-decorators 的存储模块加载到初始化程序中时出现此错误: vuex.esm.js?2f62:261 Uncaught TypeError: Cannot r
我有一个 VueX 商店,有两个模块,user.js 和merchant.js,顶层是index.js。 user.js 中的 getter 是: 重构 const getters = { s
我在我的代码库中偶然发现了这个错误,并试图看看是否有人可以修复它。 以下是我的 listings/actions.js export const fetchFeaturedListings = ({
我正在尝试将 Vuex 与 Vue 3 一起使用。这是我在 main.js 中的代码: import { createApp } from 'vue'; import App from './App.
我在我的代码库中偶然发现了这个错误,并试图看看是否有人可以修复它。 以下是我的 listings/actions.js export const fetchFeaturedListings = ({
我是一名优秀的程序员,十分优秀!