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

Всем привет. А я могу ref объявлять вне жизненных циклах

vue? Оно работает и не выдает ошибок, но не уверен, что так стоит писать.

72 ответов

120 просмотров

можешь, это будет глобальный реф, который будет создан 1 раз при инициализации модуля если есть SSR, то это не будет работать

Nikita-Svoyachenko Автор вопроса
Artyom Tuchkov
можешь, это будет глобальный реф, который будет со...

Не будет работать в том плане, что я на каждый реквест не смогу заинициализировать свой ref и у меня просто каждый реквест будет один и тот же реф дергать?

Nikita-Svoyachenko Автор вопроса
Artyom Tuchkov
именно так, да

Понял, спасибо. Еще есть один вопрос последний: а так ли vue нуждается в state manager? С его реактивностью он выглядит самодостаточным. И мне кажется во многих случаях stm будет избыточен или это не так? Вопрос, наверное, сложный, можно просто да/нет ответить, чтобы я просто понимал, прав я или нет

Nikita Svoyachenko
Понял, спасибо. Еще есть один вопрос последний: а ...

в целом - да, во многих случаях он действительно избыточен, в большинстве приложений очень мало глобального стейта и при желании его можно расшарить и через условный provide/inject, просто сторы дают универсальный интерфейс, который все знают, ну и в дополнение всякие плюшки типа поддержки SSR и девтулзов но если приложение не особо сложное и над ним работает не целая команда, то можно без особых проблем обойтись provide/inject, просто это потребует чуть больше усилий по сравнению с готовыми сторами, где все уже есть из коробки

композаблы не дают никакой дополнительной функциональности и не могут заменить provide/inject единственное, что там можно сделать - это вынести переменную в глобальный скоуп, но это не относится к самим композаблам и работает не во всех случаях

Denis Chernov
они вообще о разном

О разном То что может провад могут композаблы Но не наоборот

Ruslan
Где именно они не могут заменить provide/inject?

да там и нечем заменять, сами композаблы не дают ничего дополнительно, глобальный скоуп - это не про композаблы но если сравнивать с глобальным скоупом, то: - provide/inject умеет шарить данные между определенным куском дерева и только там, где его вызовут, а глобальный скоуп - синглтон по умолчанию - это не работает при SSR

Artyom Tuchkov
композаблы не дают никакой дополнительной функцион...

> работает не во всех случаях мне интересно что это за случаи

Artyom Tuchkov
да там и нечем заменять, сами композаблы не дают н...

Глобальный скоуп это что? window.someVar - глобальный ref внутри модуля - модульный ref внутри композабл функции - локальный

Artyom Tuchkov
SSR

в наксте например useState это же тот же композабл нет?

Ruslan
Глобальный скоуп это что? window.someVar - глобаль...

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

999
в наксте например useState это же тот же композабл...

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

Artyom Tuchkov
да там и нечем заменять, сами композаблы не дают н...

> - provide/inject умеет шарить данные между определенным куском дерева и только там, где его вызовут, а глобальный скоуп - синглтон по умолчанию То есть правильно я понимаю, что дополнительная защита доступа (доступ имеют только потомки) - это и есть та фича, которая недоступна глобальным рефам?

Ruslan
> - provide/inject умеет шарить данные между опред...

глобальный реф не имеет представления об иерархии

Denis Chernov
глобальный реф не имеет представления об иерархии

т.е. злоупотребление композаблами грозит потерей иерархии?

Ruslan
> - provide/inject умеет шарить данные между опред...

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

Artyom Tuchkov
это не “защита доступа”, это принципиально другой ...

независимый стейт можно сделать локальными рефами композабла

Ruslan
независимый стейт можно сделать локальными рефами ...

этот независимый стейт должен шариться на определенное кол-во дочерних компонентов, поэтому локальные рефы тоже не подойдут

именно эту проблему и решает provide/inject

а на кой тебе в ногу стрелять если ты сразу можешь взять DI

Denis Chernov
а на кой тебе в ногу стрелять если ты сразу можешь...

Потому что когда логика метакомпонента вынесена в композабл, а в подкомпонентах только ихняя логика, тогда все намного лучше читается и осознается

Ruslan
Потому что когда логика метакомпонента вынесена в ...

DI никак не противоречит composable сколько раз я уже это написать должен

Artyom Tuchkov
именно эту проблему и решает provide/inject

ок мне не попадались еще задачи чтобы providе/inject прямо так был к месту

Ruslan
Потому что когда логика метакомпонента вынесена в ...

provide/inject почти всегда и так заворачиваешься в композабл в провайдере вызывается что-то типа createSomeContext();, а в дочерних компонентах useSomeContext();

Ruslan
ок мне не попадались еще задачи чтобы providе/inje...

ну вот я как-то неделю назад кидал задачу про дропдаун, где нужно расшарить стейт между всеми дочерними элементами, чтобы не писать каждому v-model, - это отличное применение для provide/inject

Ruslan
я помню специфичная задача

для ui либ - практически стандартная)

kayr Султанбек
Что значит независимый?

1 провайд - 1 переменная 2 провайда - 2 переменные каждая из них шарится на поддерево, они независимы

kayr Султанбек
Что значит независимый?

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

Artyom Tuchkov
1 провайд - 1 переменная 2 провайда - 2 переменные...

Если речь про то, что состояние не шарится, то композаблы тоже так могут

kayr Султанбек
Если речь про то, что состояние не шарится, то ком...

речь про то, что оно шарится на поддерево, а не “вообще не шарится” или “шарится для всех”

Artyom Tuchkov
речь про то, что оно шарится на поддерево, а не “в...

Тогда можно создать отдельное состояние (композабл), разве не так принято делать

kayr Султанбек
Тогда можно создать отдельное состояние (композабл...

композабл может работать только либо с локальной переменной, объявленной внутри композабла, либо с глобальной, объявленной за его пределами в первом случае ты получаешь локальный стейт, который остается в том же компоненте, где ты вызываешь композабл, и он никуда не шарится вообще во втором случае ты получаешь общий стейт на все приложение, любой твой компонент будет работать только с ним и ни с чем больше это не то же самое, что и provide/inject

Artyom Tuchkov
композабл может работать только либо с локальной п...

по факту композабл из коробки умеет ничего :D

Denis Chernov
по факту композабл из коробки умеет ничего :D

так и есть, это просто кусок компонента

Artyom Tuchkov
композабл может работать только либо с локальной п...

Ты говорил, что стор лучше заменить provide inject,чем это лучше композаблов? Тут различие о шаринге только внутри дерева ничего не дает

Artyom Tuchkov
так и есть, это просто кусок компонента

ref в модуле это не кусок компонента

kayr Султанбек
Ты говорил, что стор лучше заменить provide inject...

композаблы сами по себе ничего шарить не умеют вообще, это не замена provide/inject ты можешь расшарить только глобальную переменную, но, как я писал выше, это не будет работать с SSR и ты не сможешь создать несколько инстансов этой переменной, если потребуется

Ruslan
ref в модуле это не кусок компонента

так ref в модуле и к композаблам никак не относится

Artyom Tuchkov
так ref в модуле и к композаблам никак не относитс...

а чем композабл отличается от модуля с рефом и функцией внутри?

Artyom Tuchkov
композаблы сами по себе ничего шарить не умеют воо...

Можешь пояснить, что такое инстанс переменной? А то что композаблы сами по себе не могут шарить данные, только если переменная объявлена в глобальном скоупе все ещё не мешает шарить стейт глобально

Ruslan
а чем композабл отличается от модуля с рефом и фун...

а что отличает комозабл от обычной функции?)

Ruslan
а чем композабл отличается от модуля с рефом и фун...

тем, что композабл может работать с компонентным апи и вызывать внутри себя onMounted, inject, watch и все остальное, что привязано к жизненному циклу компонента

Artyom Tuchkov
тем, что композабл может работать с компонентным а...

ну так если он это не использует, какой он кусок компонента? а во-вторых, это просто хуки, которые он позволяет дергать, если они есть

kayr Султанбек
Можешь пояснить, что такое инстанс переменной? А т...

это количество копий этой переменной если ты объявил 1 глобальную переменную, то она так и остается одной и ты не сможешь просто создать ее независимую копию без костылей с фабриками в случае с provide/inject ты можешь создавать сколько угодно копий твоего стейта и они все будут независимые

Artyom Tuchkov
это количество копий этой переменной если ты объяв...

Ну я же говорю в контексте глобального стейта( стора ), он на то и глобальный

kayr Султанбек
Ну я же говорю в контексте глобального стейта( сто...

если говорить о глобальном то это не реакт, и тут стора подойдет лучше

разве я не могу вызвать его из простого модуля?

kayr Султанбек
Ну я же говорю в контексте глобального стейта( сто...

так я и говорю, что да, так можно, но: 1. ты не сможешь создать несколько инстансов 2. это не будет работать с SSR если оба пункта не проблема, то можно использовать глобальную переменную и шарить ее через композабл

Denis Chernov
если говорить о глобальном то это не реакт, и тут ...

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

Ruslan
разве я не могу вызвать его из простого модуля?

можешь, но часто ли ты так делаешь и часто ли это нужно?

Artyom Tuchkov
так я и говорю, что да, так можно, но: 1. ты не с...

Теперь стало на свои места, но остался ещё один вопрос, как изменять стейт из потомков?

Artyom Tuchkov
можешь, но часто ли ты так делаешь и часто ли это ...

Зависит от архитектуры приложения Еще раз - я смотрю на композаблы как на реактивные классы/объекты, в которые при необходимости можно засунуть бизнес логику, не привязанную к компонентам

Ruslan
Зависит от архитектуры приложения Еще раз - я смот...

я не очень большой сторонник бизнес-логики в композаблах, потому что по факту ты все еще привязан к вью и используешь вьюшный апи, просто, возможно, не завязываешься на жизненный цикл компонента

kayr Султанбек
На каждую мутацию провайдить функцию?

а обычно много чего нужно мутировать из дочерних компонентов? + стейт можно группировать и одной функцией менять любое свойство

Artyom Tuchkov
а обычно много чего нужно мутировать из дочерних к...

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

kayr Султанбек
Provide inject в качестве альтернативы стора звучи...

конкретно для глобальных сторов это обычно не нужно, там всегда 1 инстанс на все приложение, но для других случаев вполне себе бывает нужно ну и, опять же, provide/inject может быть альтернативой глобальному стору, но это не всегда рационально и часто приводит к велосипедам я бы его брал в качестве стора только в самых простых случаях, когда нужно что-нибудь быстро расшарить на все приложение

Artyom Tuchkov
конкретно для глобальных сторов это обычно не нужн...

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

kayr Султанбек
Ну вот об этом я изначально говорил, что если комп...

с этим я и не спорил, а как раз объяснял, что provide/inject именно для таких случаев и нужен, а пытаться имитировать это через композабл - мягко говоря, неудобно

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

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

30500 за редактор? )
Владимир
47
Недавно 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
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Oh sorry did you want it in Gunter's chains?
Martin Rys
15
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта