Size: a a a

JavaScript.Ninja

2020 July 06

M

Misha in JavaScript.Ninja
Но я не верю, что вам не завезли что-то аля роутер.пуш
источник

EN

El Nasurov in JavaScript.Ninja
Misha
Но я не верю, что вам не завезли что-то аля роутер.пуш
Спасибо!

Завезли. Однако хотелось не сохранять переход в историю навигации
источник

AV

Alexei Vinogradov in JavaScript.Ninja
El Nasurov
Нет ли в vue-router возможности изменять параметр урла напрямую без изменения всей строки урла ?

Ведь не очень хорошо при каждом малейшем изменении раута деструктурировать объект для изменения лишь одного параметра..

          this.$router.replace({
           query: { ...this.$route.query, query: yourValue },
         });


Или же это не страшно ввиду небольшой длины урла ?
Во, я тут как раз с похожей хренью столкнулся и задумался. (Background: Java и эксперт в тестировании).

Тут я бы даже не моргнул, если бы мне только один раз деструктурировать нужно было. А вот как вам такое, Илон Маск?

mockState={
 offer: {
 vsu: 38000,
 options: {
   cycleTheft: {
     check: false,
     amount: 1,
   }
 }
}

mockStateAmount200={
 ...mockState,
 offer: {
    ...mockState.offer,
    options: {
      ...mockState.offer.options,
      cycleTheft:{
        ...mockState.offer.options.cycleTheft,
        amount : 200 // наконец-то!
      }
        }    
   }
}
источник

IK

Illya Klymov in JavaScript.Ninja
Alexei Vinogradov
Во, я тут как раз с похожей хренью столкнулся и задумался. (Background: Java и эксперт в тестировании).

Тут я бы даже не моргнул, если бы мне только один раз деструктурировать нужно было. А вот как вам такое, Илон Маск?

mockState={
 offer: {
 vsu: 38000,
 options: {
   cycleTheft: {
     check: false,
     amount: 1,
   }
 }
}

mockStateAmount200={
 ...mockState,
 offer: {
    ...mockState.offer,
    options: {
      ...mockState.offer.options,
      cycleTheft:{
        ...mockState.offer.options.cycleTheft,
        amount : 200 // наконец-то!
      }
        }    
   }
}
про это уже есть пропозал в язык )
источник

IK

Illya Klymov in JavaScript.Ninja
а пока можете спокойно взять любую библиотеку, решающую вашу проблему
источник

AV

Alexei Vinogradov in JavaScript.Ninja
Умные ребята подсказали как минимум 2 изящных вариантов решения - (один через deepCopy: any), другой еще короче
источник

IK

Illya Klymov in JavaScript.Ninja
const mockState200 = produce(mockState, draftState => {
 draftState.offer.options.cycleTheft.amount = 200;
});
источник

IK

Illya Klymov in JavaScript.Ninja
это с immer для примера
источник

AV

Alexei Vinogradov in JavaScript.Ninja
type DeepWriteable<T> = { -readonly [P in keyof T]: DeepWriteable<T[P]> };

mockStateAmount200=mockState as DeepWriteable<Something>;
mockStateAmount200.offer.options.cycleTheft.amount=200;
источник

AV

Alexei Vinogradov in JavaScript.Ninja
Illya Klymov
const mockState200 = produce(mockState, draftState => {
 draftState.offer.options.cycleTheft.amount = 200;
});
о, мерси immer - библиотека, да?
источник

IK

Illya Klymov in JavaScript.Ninja
да
источник

AV

Alexei Vinogradov in JavaScript.Ninja
Alexei Vinogradov
type DeepWriteable<T> = { -readonly [P in keyof T]: DeepWriteable<T[P]> };

mockStateAmount200=mockState as DeepWriteable<Something>;
mockStateAmount200.offer.options.cycleTheft.amount=200;
Код такого типа не оскорбит настоящего JS-ера? 🙂
источник

IK

Illya Klymov in JavaScript.Ninja
ну во-первых это тайпскрипт
источник

IK

Illya Klymov in JavaScript.Ninja
во-вторых вы только что разрушили объект mockState
источник

AV

Alexei Vinogradov in JavaScript.Ninja
он тоже поменяется?!
источник

IK

Illya Klymov in JavaScript.Ninja
конечно
источник

IK

Illya Klymov in JavaScript.Ninja
как и во всех языках объекты передаются по ссылке
источник

AV

Alexei Vinogradov in JavaScript.Ninja
о, тогда так плохо
источник

AV

Alexei Vinogradov in JavaScript.Ninja
function deepCopy<T extends object>(source: T): any {
 return JSON.parse(JSON.stringify(source))
}


А вот так?
источник

AV

Alexei Vinogradov in JavaScript.Ninja
mock200=deepCopy(mockState)
источник