• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/ru/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

FAQ Vuex best-practices или почему ты до сих пор плохо пишешь код...

allready

Начинающий специалист
Автор темы
8 Ноя 2020
66
41
55
Vuex - это глобальная библиотека для управления состоянием.
Ранее видел очень много разработчиков, которые не правильно используют Vuex. То есть, они управляют состоянием которое в действительности не являлось глобальным через Vuex.
Что же это значит?
Например:
в приложении есть функция которая позволяет пользователю создать и редактировать список покупок.

Форма списка имела бы свой отдельный Vuex-модуль который управляет не только добавлениями и редактированиями, но и API Request(getData/sendData). Используя такой подход мы распространили бизнес-логику по всему приложению, вместо этого следовало бы инкапсулировать бизнес-логику в дерево компонентов.
На самом деле такая проблема простительна, но только в небольших проектах где модулей немного. Но, если это большой проект, то соответственно у вас будет больше десятка модулей и за ними всеми уследить будет сложно, а уж рефакторить - вдвойне.
Рассмотрим пример:
Проблемы: Vuex становится сложнее понять, какие части приложения используют те или иные модули, и разработчики могут даже бояться рефакторить любой из них, потому что никто не знает. Какая часть приложения может пострадать/сломаться
Однако, самое главное правило при работе с глобальной библиотекой управления состояния - Не использовать ее для всего.
Используйте Vuex для реальных глобальных задач, допустим: данные о пользователе, конфигурация приложения.

Про наименования:
  • Не создавайте названия которые понятны только вам. Через неделю и вам будет непонятно. Представьте, что вы открываете папку "modules", а там: list, status, compare.
  • Вам это дало какую-то информацию? Надеюсь, что вам оно тоже ничего не дало)). Бест практика: user, products, appConfig. Тоже самое относится: геттерам, state, mutations, actions
    [*]
    Значение items в state, вам оно дало какой-то смысл? Конечно нет, а как насчет? productCategories, products. Согласитесь стало лучше?
    [*]Если состояние возвращает булевое значение, лучше в начало добавить "is". Пример: isAuthUser. isAdmin
    [*]Если состояние возвращает объект/массив лучше всего писать с добавлением "get". Например: getProducts, getAdvances.
    [*]Если состояние что-то мутирует лучше добавить: set, add, remove. Где set - установка нового значения, add - добавление нового значения, remove - удаление значения


Про state:
- Создайте файл с константами и работайте с ними допустим:

import * as types from "./types.js"
mutations: { [types.INCREMENT](state) { state.count++ } }

Про геттеры:
- Не используйте геттеры там где они не нужны(видел очень много такой bad-practice). Например:
геттер возвращает объект из state. К примеру: getUser. В таких случаях лучше напрямую обращаться к state и вернуть этот объект.

Про map(state/getters...):
- В небольших проектах это не проблема, но кто вам сказал, что ваш проект не станет большим? Поэтому сразу начинайте правильно работать с данными.

import mapGetters from "vuex";
{ computed: { ...mapGetters({ getUser: userTypes.getUser }) } }

Про мутации:
  • Хорошей практикой является написание мутаций верхним регистром. (в реализациях Flux. Vuex основан на архитектуре Flux).
  • Не создавайте лишний код в мутациях. Задача мутации - мутировать данные из state. Мутации не должны ничего кроме этого делать. ( ВООБЩЕ НИЧЕГО!! ), если вам нужно сделать какие-то действия, то используйте actions и внутри вызовите commit когда это нужно будет!
  • Не мутируйте state напрямую!! Это очень плохо для мутации хралища и есть mutations!!!

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

allready

Начинающий специалист
Автор темы
8 Ноя 2020
66
41
55
Мануал рассчитан для начинающих или чуть опытнее разработчиков.
Однажды мне в руки попал проект(ragemp) который был написан очень нелепо и дали задачу:
- Напиши эту задачу...

Но, увидев структуру, я немного испугался сказать честно)
 
Последнее редактирование:

filecore

Специалист
high coder
6 Окт 2020
227
86
82
Без обид к автору, но что ты показал в статье? Как называть ту или иную функцию или файл.
В реалиях вообще можно обойтись без Vuex, достаточно монтировать компонент в mounted включая его в глобальный массив компонентов this
как пример когда вы написали компонент и хоте его объявить чтобы все методы из компонента были доступны, достаточно

Код:
    mounted() {
        global.cef.component_name = this
    }
тем самым вы инициализируете компонент и вам будут доступны все его methods а так же data останется реактивной
P.S. отпадает нужда и в REF и Vuex Pinia и тд
 
  • Like
Реакции: dinkaden и Inoi

allready

Начинающий специалист
Автор темы
8 Ноя 2020
66
41
55
Без обид к автору, но что ты показал в статье? Как называть ту или иную функцию или файл.
В реалиях вообще можно обойтись без Vuex, достаточно монтировать компонент в mounted включая его в глобальный массив компонентов this
как пример когда вы написали компонент и хоте его объявить чтобы все методы из компонента были доступны, достаточно

Код:
    mounted() {
        global.cef.component_name = this
    }
тем самым вы инициализируете компонент и вам будут доступны все его methods а так же data останется реактивной
P.S. отпадает нужда и в REF и Vuex Pinia и тд
мануал написан не только для ragemp)
 

allready

Начинающий специалист
Автор темы
8 Ноя 2020
66
41
55
Без обид к автору, но что ты показал в статье? Как называть ту или иную функцию или файл.
В реалиях вообще можно обойтись без Vuex, достаточно монтировать компонент в mounted включая его в глобальный массив компонентов this
как пример когда вы написали компонент и хоте его объявить чтобы все методы из компонента были доступны, достаточно

Код:
    mounted() {
        global.cef.component_name = this
    }
тем самым вы инициализируете компонент и вам будут доступны все его methods а так же data останется реактивной
P.S. отпадает нужда и в REF и Vuex Pinia и тд
Возможно вы и понимаете больше других, но я написал мануал на основе того, что встречал.
Начиная от не нужных модулей Vuex и заканчивая редактированиями напрямую vuex'a.
 

allready

Начинающий специалист
Автор темы
8 Ноя 2020
66
41
55
Вариация не важно даже для того же самое Vue + NodeJS + Axios или Vue + NodeJS + Express + Mysql
Согласен, что в большинстве случаях глобальное хранилище не нужно(особенно в Vue3), но условно таки для данных user'a и прочей часто переиспользуемой даты - это необходимо.
Глупо утверждать подобное, без каких-либо приведенных четко примеров.

Vue3 приводит использование библиотек глобального хранилища на минимум, но никак не лишает его этого.
 

filecore

Специалист
high coder
6 Окт 2020
227
86
82
Возможно вы и понимаете больше других, но я написал мануал на основе того, что встречал.
Начиная от не нужных модулей Vuex и заканчивая редактированиями напрямую vuex'a.
Я всё прекрасно понимаю, но если берешься писать статью, более разворачивай ее смысл
 

allready

Начинающий специалист
Автор темы
8 Ноя 2020
66
41
55
Я всё прекрасно понимаю, но если берешься писать статью, более разворачивай ее смысл
Возможно вы и понимаете больше других, но я написал мануал на основе того, что встречал.
Начиная от не нужных модулей Vuex и заканчивая редактированиями напрямую vuex'a.
 

aspidemon

Активный участник
26 Сен 2022
116
42
40
Vuex - это глобальная библиотека для управления состоянием.
Ранее видел очень много разработчиков, которые не правильно используют Vuex. То есть, они управляют состоянием которое в действительности не являлось глобальным через Vuex.
Что же это значит?
Например:


Форма списка имела бы свой отдельный Vuex-модуль который управляет не только добавлениями и редактированиями, но и API Request(getData/sendData). Используя такой подход мы распространили бизнес-логику по всему приложению, вместо этого следовало бы инкапсулировать бизнес-логику в дерево компонентов.
На самом деле такая проблема простительна, но только в небольших проектах где модулей немного. Но, если это большой проект, то соответственно у вас будет больше десятка модулей и за ними всеми уследить будет сложно, а уж рефакторить - вдвойне.
Рассмотрим пример:

Однако, самое главное правило при работе с глобальной библиотекой управления состояния - Не использовать ее для всего.
Используйте Vuex для реальных глобальных задач, допустим: данные о пользователе, конфигурация приложения.

Про наименования:
  • Не создавайте названия которые понятны только вам. Через неделю и вам будет непонятно. Представьте, что вы открываете папку "modules", а там: list, status, compare.
  • Вам это дало какую-то информацию? Надеюсь, что вам оно тоже ничего не дало)). Бест практика: user, products, appConfig. Тоже самое относится: геттерам, state, mutations, actions
    [*]
    Значение items в state, вам оно дало какой-то смысл? Конечно нет, а как насчет? productCategories, products. Согласитесь стало лучше?
    [*]Если состояние возвращает булевое значение, лучше в начало добавить "is". Пример: isAuthUser. isAdmin
    [*]Если состояние возвращает объект/массив лучше всего писать с добавлением "get". Например: getProducts, getAdvances.
    [*]Если состояние что-то мутирует лучше добавить: set, add, remove. Где set - установка нового значения, add - добавление нового значения, remove - удаление значения


Про state:
- Создайте файл с константами и работайте с ними допустим:



Про геттеры:
- Не используйте геттеры там где они не нужны(видел очень много такой bad-practice). Например:
геттер возвращает объект из state. К примеру: getUser. В таких случаях лучше напрямую обращаться к state и вернуть этот объект.

Про map(state/getters...):
- В небольших проектах это не проблема, но кто вам сказал, что ваш проект не станет большим? Поэтому сразу начинайте правильно работать с данными.



Про мутации:

  • Хорошей практикой является написание мутаций верхним регистром. (в реализациях Flux. Vuex основан на архитектуре Flux).
  • Не создавайте лишний код в мутациях. Задача мутации - мутировать данные из state. Мутации не должны ничего кроме этого делать. ( ВООБЩЕ НИЧЕГО!! ), если вам нужно сделать какие-то действия, то используйте actions и внутри вызовите commit когда это нужно будет!
  • Не мутируйте state напрямую!! Это очень плохо, для мутации хралища и есть mutations!!!

Позже дополню еще, оцените статью и дайте обратную связь.
Дайте понять, про что вы еще хотите услышать, чем больше ответов - тем больше мотивации сделать следующие мануалы
Хочу уточнить для начинающих, что нейминги для функций могут быть на ваш вкус, всегда, я хочу подчеркнуть - ВСЕГДА в проекте есть внутренняя документация с подробным описанием каждого класса и методов существующих в нём, либо каждой функции если это функциональное программирование. И не стоит писать, что это все туфта, если у проекта нет внутренней документации - это не проект, а какая-то ху*ня на палочке
 

mippoosedev

Гуру
2 Мар 2021
294
139
100
Перешел в середине 22го на vue3+pinia, очень советую. Работаешь как с глобальным объектом, реактивность сломал ПРАКТИЧЕСКИ невозможно. Но за старания +реп
 

filecore

Специалист
high coder
6 Окт 2020
227
86
82
Перешел в середине 22го на vue3+pinia, очень советую. Работаешь как с глобальным объектом, реактивность сломал ПРАКТИЧЕСКИ невозможно. Но за старания +реп
Яб вообще посоветовал связку Vite + Vue + Pinia
Старый vue-cli уже ушел в забвение, долгая компиляция
 
  • Like
Реакции: Randomchik

vpn

Начинающий специалист
29 Май 2022
129
64
65
Яб вообще посоветовал связку Vite + Vue + Pinia
Старый vue-cli уже ушел в забвение, долгая компиляция
Проверял свой VUE3 CLI-проект на Vite около двух недель назад, в моем случае Vite билдит ВСЕГО на 3-4 секунды быстрее.
Еще один момент, это что Vite компилит JS как модуль, что не воспринимается RAGE.
Я так и не нашел информации, как выставить билд с модульной сборки JS (Ecma) на CommonJS, но я прочитал информацию в интернете что для этого есть отдельные модули, но они как правило увеличивают время билда. (Так-что пока не могу понять прикол Vite)

Было бы интересно если бы ты рассказал как использовать совместимость билда VITE с RAGEMP.
Хотя не знаю есть ли вы этом смысл, учитывая что скорость билда у меня особо не изменилась, что в Dev, что в Prod..
Возможно Vite нуждается в правильной настройке?
 

mippoosedev

Гуру
2 Мар 2021
294
139
100
Проверял свой VUE3 CLI-проект на Vite около двух недель назад, в моем случае Vite билдит ВСЕГО на 3-4 секунды быстрее.
Еще один момент, это что Vite компилит JS как модуль, что не воспринимается RAGE.
Я так и не нашел информации, как выставить билд с модульной сборки JS (Ecma) на CommonJS, но я прочитал информацию в интернете что для этого есть отдельные модули, но они как правило увеличивают время билда. (Так-что пока не могу понять прикол Vite)

Было бы интересно если бы ты рассказал как использовать совместимость билда VITE с RAGEMP.
Хотя не знаю есть ли вы этом смысл, учитывая что скорость билда у меня особо не изменилась, что в Dev, что в Prod..
Возможно Vite нуждается в правильной настройке?
хз шо за проблемы у тебя, кидаешь ссылку на браузерный хтмл файлик и всё....
 

filecore

Специалист
high coder
6 Окт 2020
227
86
82
Проверял свой VUE3 CLI-проект на Vite около двух недель назад, в моем случае Vite билдит ВСЕГО на 3-4 секунды быстрее.
Еще один момент, это что Vite компилит JS как модуль, что не воспринимается RAGE.
Я так и не нашел информации, как выставить билд с модульной сборки JS (Ecma) на CommonJS, но я прочитал информацию в интернете что для этого есть отдельные модули, но они как правило увеличивают время билда. (Так-что пока не могу понять прикол Vite)

Было бы интересно если бы ты рассказал как использовать совместимость билда VITE с RAGEMP.
Хотя не знаю есть ли вы этом смысл, учитывая что скорость билда у меня особо не изменилась, что в Dev, что в Prod..
Возможно Vite нуждается в правильной настройке?
Я сделаю проще

Можешь посмотреть!
 

allready

Начинающий специалист
Автор темы
8 Ноя 2020
66
41
55
Проверял свой VUE3 CLI-проект на Vite около двух недель назад, в моем случае Vite билдит ВСЕГО на 3-4 секунды быстрее.
Еще один момент, это что Vite компилит JS как модуль, что не воспринимается RAGE.
Я так и не нашел информации, как выставить билд с модульной сборки JS (Ecma) на CommonJS, но я прочитал информацию в интернете что для этого есть отдельные модули, но они как правило увеличивают время билда. (Так-что пока не могу понять прикол Vite)

Было бы интересно если бы ты рассказал как использовать совместимость билда VITE с RAGEMP.
Хотя не знаю есть ли вы этом смысл, учитывая что скорость билда у меня особо не изменилась, что в Dev, что в Prod..
Возможно Vite нуждается в правильной настройке?
Vite в разы быстрее, чем просто cli)
Может это не видно в маленьких проектах, но даже в средних он намного быстрее билдит.

(мне приходилось ждать билда или даже vue-cli run serve около 12-15 секунд, но используя Vite это все ушло к 4-5 секундам. Я считаю, что это очень достойно)