169 похожих чатов

Всем привет! vue 2.6.14, vuex 3.6,2, сделал тестовый проект: store.js ... const store

= new Vuex.Store({
state: {
object: {}
},
mutations: {
init(state) {
state.object = _.assignIn({}, state.object, {
array: [1, 2, 3],
string: 'string',
num: 0,
obj: { key1: 1, key2: 2 }
})
},
},
getters: {
value(state) {
return _.get(state, 'object')
}
}
})
...


App.vue

...
<p>{{ $store.state }}</p>
<input type="text" v-model.number="value.num" />
<button type="button" @click="value.num++">+++</button>
<ul>
<li v-for="(num, idx) in value.array" :key="idx">
{{ num }}
<button type="button" @click="value.array.splice(idx, 1)">
delete
</button>
</li>
</ul>
...


Почему-то мутация value, которое является геттером, влияет напрямую на стейт. Как такое возможно? В другом проекте с vue 2.5.17 и vuex 3.1.1 этого поведения нету, и приходится отправлять экшны на обновление стейта. Разница просто в версии, как я понял?

8 ответов

19 просмотров

>влияет напрямую на стейт. Как такое возможно? читаем про передачу объектов по ссылке >Почему-то мутация value а зачем ты вообще мутируешь геттер?

Alexey-Topunov Автор вопроса
Artyom Tuchkov
>влияет напрямую на стейт. Как такое возможно? чи...

Я в курсе про ссылки Я просто попробовал интуитивно, и оно сработало. Я в курсе, что чище будет диспатчить экшны

Alexey Topunov
Я в курсе про ссылки Я просто попробовал интуитив...

во-первых, твой геттер абсолютно бесполезный во-вторых, он просто возвращает ссылку на объект в стейте, поэтому любая мутация этого объекта влияет на сам объект в стейте >чище будет диспатчить экшны это не “чище”, это единственный правильный вариант

Alexey-Topunov Автор вопроса
Artyom Tuchkov
во-первых, твой геттер абсолютно бесполезный во-вт...

Я не говорю сейчас о правильном подходе в написании кода, я говорю о конкретном поведении. В рабочем проекте с такой вот структурой state'a этого поведения не наблюдается, когда я обращаюсь к какому-то глубоко вложенному ключу и пытаюсь менять его значение.

Alexey-Topunov Автор вопроса
Artyom Tuchkov
во-первых, твой геттер абсолютно бесполезный во-вт...

Хотя, по идее, должно было бы, раз я передаю объект по ссылке так же, как и в тестовом примере.

Alexey Topunov
screenshot Я не говорю сейчас о правильном подходе в написани...

это нужно смотреть, где и как ты обращаешься, и как его меняешь

Alexey-Topunov Автор вопроса
Artyom Tuchkov
это нужно смотреть, где и как ты обращаешься, и ка...

Например, путь такой: state.default.existingKey.label (string). Объект state.default должен быть полностью реактивен, но почему-то не работает v-model на инпуте по этому ключу.

Alexey Topunov
Например, путь такой: state.default.existingKey.la...

показывай код, где именно не работает по описанию все должно работать, если ключ, например, не добавляется динамически

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта