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 ответов

16 просмотров

>влияет напрямую на стейт. Как такое возможно? читаем про передачу объектов по ссылке >Почему-то мутация 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...

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта