изменяя что-то в одном компоненте, меняется во всех
При клике на элемент - я сохраняю текущий элемент в store vuex и перехожу по роуту...
state: { user:{ name:'',
updateName(state, name){ state.name=name;
user() {
return new Proxy(this.$store.state.user, {
set: (target, prop, value) => {
this.$store.commit('updateUser', { [prop]: value });
return true;
},
});
},
updateUser(state, user) {
Object.assign(state.user, user);
},
<input v-model="user.name">
<input v-model="user.surname">
<input v-model="user.email">
<input v-model="user.phone">
this.$store.state.user.LS.push(userObj);
this.$store.state.isAdding=false;
this.$store.commit('updateProduct', {
product: product.options,
data: {
isFree: true,
},
});
user() {
return new Proxy(this.$store.state.user, {
set: (target, prop, value) => {
this.$store.commit('updateUser', { [prop]: value });
return true;
},
});
},
updateUser(state, payload) {
Object.assign(state.user, payload);
},
this.$store.dispatch({type:'ADD_CONTACT'}, payload)
actions:{ addContact:
this.$store.dispatch({
type: 'addContact',
payload,
});
actions: {
addContact: ({ commit }, { payload }) => commit('ADD_CONTACT', payload),
},
this.$store.commit('ADD_CONTACT', payload)
. size: this.namespaceSize
, а size: { ...this.namespaceSize }
. Или внутри стора копируйте, в мутации. получает следующие аргументы <...> При определении в модуле
state, // при использовании модулей — локальный state модуля getters, // локальные геттеры текущего модуля rootState, // глобальный state rootGetters // все геттеры
Первое, что нужно знать — store.dispatch
может обрабатывать Promise, возвращаемый обработчиком действия, и также возвращает Promise
console.log(this.$store) - этот экшн видит
spoiler
this.$store.originalDispatch('setCategory', cat)
. В хуке App.vue выглядит не очень уместно, хочется вынести эту логику в другое место.
Почему я не могу блокировать загрузку приложения до выполнения нужного мне действия (запрос на апи, возврат ответа и наполнение стора)?
store.dispatch('получитьДанные').then(() => {
new Vue({
el: '#app',
store,
router,
...
<div v-if="данные в хранилище есть">
основной контент приложения
</div>
<div v-else>
данные загружаются, надо подождать
</div>
не получается обратиться к геттеру <...> показывает null, хотя если вызвать store.getters, то данные есть
<компонент v-if="$store.getters.profile" />
//Подключаю хранилище import store from './store'; store.dispatch('getUser'); new Vue({ el: '#app', router: router, components:{ 'head-app':headImplant, 'footer-app':footer, 'sidebar-app': sidebar } });
new Vue({
store,
...
{ имя_диалога: состояние }
. Тогда при обновлении состояния диалогов не будет необходимости обращаться к ним поимённо:mutations: {
dialogShow: (state, payload) => Object.assign(state.modals, payload),
},
modals() {
return new Proxy(this.$store.state.modals, {
set: (target, prop, value) => {
this.$store.commit('dialogShow', { [prop]: value });
return true;
},
});
},
<el-button @click="modals.dialogSignIn = true">sign in</el-button>
<el-dialog :visible="modals.dialogSignIn" @close="modals.dialogSignIn = false">
<span slot="footer" class="dialog-footer">
<el-button @click="modals.dialogSignIn = false">Закрыть</el-button>
</span>
</el-dialog>
v-if
с этим геттером. Пока данных нет - экземпляр компонента не будет рендериться, а значит и мутация, требующая отсутствующих данных, тоже вызвана не будет, а значит и ошибки не будет. store.dispatch('заргузитьДанныеПользователя').then(() => {
new Vue({ ... });
});
created() {
this.$store.dispatch('заргузитьДанныеПользователя');
},
<div v-if="$store.state.данныеПользователя">
контент
</div>
<индикатор-загрузки v-else />
На практике для упрощения кода часто используется деструктуризация аргументов из ES2015 (особенно при необходимости многократного вызоваcommit
):
actions: { increment ({ commit }) { commit('increment') } }
я понял, что нет экшена. Вопрос в том, что он есть )
В state.FIELDS.formFieldsMap
данные лежат
Действительно, а как тогда быть?
getters: {
transportFields: state => state.FIELDS.formFieldsMap || [],
...