В данный момент я изучаю vuex, и я застрял в функции отображения, как import { mapGetters } from 'vuex';
, в моем состоянии у меня есть объект с именем users, где я сохраняю пользовательские данные, а позже добавлю функцию addNewUser для расширения объекта пользователей. Но для этого тестового примера я просто создал фиктивного пользователя с именем "Джон":
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
, а затем перебрал userNames
с помощью forEach , Но понял, что это не лучший способ сделать это.
как мне добиться, чтобы получить данные о состоянии пользователей и распечатать их, как forEach l oop, как я делал раньше?
В строке 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>