Это копия, сохраненная 14 февраля в 19:16.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Больше пары строк кода в посте или на скриншоте ведут в ад.
Для программирования на HTML https://codesandbox.io
Для Node.js с консолькой https://repl.it/languages/nodejs
Если рассчитываешь получить дельный ответ, сформулируй правильно вопрос: «что я хочу получить, что я для этого делаю, что я вместо этого получаю». Если/когда самостоятельно найдёшь решение — поделись в треде, мы за тебя переживаем.
Документация - https://developer.mozilla.org
Руководство для вката - https://github.com/acilsd/wrk-fet#javascript
Надо смотреть именно когда выложили.
Хотя, я и пару месяцев назад видел как новая вакансия набирает 500-600 за половину рабочего дня.
Некоторые тупо фармят отклики для свои baza данных.
Так то были заснайпленные скриншоты в пик популярности айти, а тут рандомный оффер открыл
Бля проигрывал с этой гречи когда смотрел пару месяцев назад. Они там миддла искали.
Очередная секция развлекательного журнала под названием разгадайте шараду, а половина шарады проёбана, поэтому придумайте шараду сами!
Это шаблонный фидбек, когда тебе не хотят говорить в глаза, чем ты не подошёл. Ведь так ты подкачаешься, и может быть придёшь ещё раз через полгода-год, не добавляя контору в чёрный список, особенно если отвечать будет та же клуша.
Очевидно что много бабла хотел. Это ВСЕГДА основная причина отказа при найме с улицы
Или наниматели не видели в нем трудовую пчелку, нах им философы жаваскрипта.
>>20228
Алсо да, посмотрел статью. Я как-то тоже обосрался на собесе из-за онлайн редактора. Потому что крутится этот вебнёвый VS Code, в котором даже на линухе/виндузе часть хоткеев по дефолту отличается. Это не говоря, про то что часть хоткеев может быть кастомизированы, у чела могут стоять вим-хоткеи, он вообще может пользоваться продуктами жид-брейнза.
Особенно когда за всем этим зоонаблюдает какой-то пидор. Просто пару раз делаешь не то, воротишь взад, начинаешь делать так как не привычно. + Проёбанное время, +невры.
ПОэтому когда предлагают покодить говнозадачки на условном голом yandex-cheta.notepad - вот это оптимально. Ты сразу ожидаешь, что там нихуя не работает и ты в блокноте.
Если передаётся в аргумент "service" строка "invoices", тогда axios ответ должен типизировать ответ API как IInvoiceAPIResponse. Если же строка "websites", тогда axios должен типизировать ответ как IWebsiteAPIResponse. Когда функцию вызываешь, всё нормально работает. Но внутри функции когда делаешь flatMap() не хочет приводиться тип.
>>20259
Дата - это просто ответ от axios'а. Там внутри только state ("ok" или "error"), result с массивом, paging с ключом пагинации.
Покажем этим нормисам и быдлу кто тут бог жопыскрипта?
Особенно жопа горит от yaml файла конфига, сука, я вообще не ебу какие ключи за что отвечают. Что я должен там описывать, а что не должен, какие ключи на что влияют и т.п. Почему нельзя было сделать json со схемой и описанием ключей.
Вот KeySchema и AttributeDefinitions, например. Я должен прописывать для каждого столбца в моей ДБ или только для айдишника с partition key? Если для каждого столбца, то там не пропускает любой формат, кроме S|N|B, а у меня может быть и M и L. Кароче, кто работал, поясните, это я конченый далбоёб, или там действительно, не всё так радужно, как в рекламе.
Почему у тебя тип расширяет константу строку. Это какая-то хтоническая ебанина, не?
А нафига тебе серверлесс? Ну то есть я не пойму, что тебе даёт использование фреймворка "serverless"? У него кроме няшной админки больше ничего нет. Ты можешь взять обычный CDK и просто задеплоить без всяких головняков https://github.com/buithaibinh/blog-tutorials/tree/47320534264ead56fac26a80b740a1c56dbddad3/cdk-api-gateway-dynamodb Только добавишь там cognito и авторизацию. Типа такого:
authorizationType: AuthorizationType.COGNITO,
authorizer: {
authorizerId: authorizer.ref
}
Та в задании одно из требований
>Serverless Framework or SST with CloudFormation as an IaC provider
Алсо, я взял фреймворк в надежде, что там из коробки будет всё, что нужно, но потом понял, что это хуйня собачья и надо поверх накатиывать плагины и прочее.
Насколько я понял тебе надо перегрузку функции, она вот так работает.
Шо то хуйня шо эта хуйня. Если бы у меня был выбор между serverless и sst, я бы наверно выбрал sst. Он лично на мой вкус поприятнее. Это типа набора сниппетов cdk, чуть облегчает писанину, но остаётся тем же cdk по сути. А serverless это по сути тот же ебучий cloudformation с его ебучими ямлами. Пусть это вкусовщина, но эти ямлы и этот cloudformation настоебал. CDK в миллиард раз удобнее и лучше.
Строки, зафиксированные через fixedRowCount скроллятся влево-вправо не синхронно остальной таблице. Особенно хорошо видно, если зафиксировать несколько строк. Кто-нибудь сталкивался с такой проблемой, как ее можно решить? Какие есть еще либы для виртуализации, в которых нет таких траблов?
Я как раз в прошлом треде бугуртил на react-window. Но твоя либа выглядит менее колхозно, мне кажется мне моё говно надо будет переделывать на react-virtualized.
У меня хорошо скролится всё кроме фаерфокса опять, в нем у таблицы есть какой-то лишний пустой хвост. Закапывайте фаерфокс как в своё время ИЕ.
Я просто в ахуе. Создаю запись в бд (через PutCommand), а она не хавает ReturnValues: "ALL_NEW", только ALL_OLD или NONE (хотя тайпскрипт говорит что хавает всё), то есть, создав нового юзера, я не могу этим же API сразу же отдать данные об этом юзере из БД. Можно вернуть новую запись через UpdateCommand, которая, если нет записи с таким партишн ки, создаст его, но она выдаёт мне ошибку The provided key element does not match the schema.
(У меня id - partition key и email GSI). Я просто в ахуе от этого. Всё через жопу, просто всё.
Попался такой движок древний, лень в этом копролите копаться.
1. В aws не нужно создавать пользователя в БД, для этого есть cognito. У тебя потом не подцепится api gateway авторизация, если ты будешь велосипеды строить.
2. Получать надо через getItem, а не через updateCommand.
3. Можно получить пользователя, смотри "putItem callback". Надо было в коллбеке читать созданную запись.
4. Также можно вместо putItem делать updateItem, тогда вернётся.
5. Проще было любой orm взять типа того же electrodb и не мучаться.
Я задание делаю, и могу использовать только то, что они разрешили. Там авторизацию надо реализовать через кастомный ауторайзер-лямбду.
>Получать надо через getItem, а не через updateCommand.
Я имел ввиду, что функция создания PutItem не возвращает созданной записи, и что бы не юзать getItem после putItem, я заюзал update.
>Также можно вместо putItem делать updateItem
Так и делал.
Как создать через updateItem (или putItgem, похуй) элемент, в котором id - partial key, а email - GSI? Что бы email был уникальным?
ConditionExpression: 'attribute_not_exists(email)', пропускает одинаковіе мейлы.
Я уже ничего не понимаю.
Чёт ты неточно говоришь. Мне щас лень в реале проверять, но неужели PutItemCommand нет response с Item и созданным элементом? Странно. GSI нужно было создавать в SST, при создании базы данных. Там указываешь partition и sort key, и дополнительный индекс создаётся. Ты можешь написать например EmailIndex GSI, можно указать чё-то типа Email в качестве partition key и Created в качестве sort key. И там надо будет добавлять эти поля в PutItem. Строго говоря, он сам не будет проверять на уникальность. Partition key может повторяться. Уникальна может быть только сама комбинация partition key + sort key. Но если у тебя нет sort key, тогда он будет жаловаться на повторяющийся айдишник. Либо attribute_not_exists проверять.
Пиздос, там зачем-то написано что есть поддержа таблиц, но все таблицы всё равно рисуются дивами. Какие же колхозаны, реактодебилы.
>эвент эмиттер
Ты 15 раз написал про него и мне уже кажется что кроме эвент-эмиттера и пропс-дриллинга в реакте вообще ничего не нужно. Т.е. грейд такой: эвент эмиттер->useContext->mobx,zustand->redux.
Поясню, в типичном приложении redux выполняет роль the-source-of-truth. Есть user и есть список друзей, когда компонент хочет отрисовать список он берет его через селектор, когда другой компонент хочет поменять это список, он вызывает dispatch. Т.е. redux становится центром всего приложения. Но зачем?
1) Тестировать не удобно (редьюсеры легко, но это не то)
2) По умолчанию не хранит не сериализумые объекты, т.к. на них не работает JSON.stringify (Map,Set, итд)
3) Подменяет старый стэйт на новый, вызывая сравнение и ререндер, что подается как плюс, хотя надежнее контролировать каждое изменение вручную
Мне кажется пришло время эвент эмиттеру явить себя миру
Пиздос чел.
Что наследуется от эвент эмиттера в жабаскрипте:
1. Все хтмл элементы.
2. socket.io
3. HTTP на ноде
4. jQuery
5. небо и аллах
Этот ваш реакт сдохнет, ангуляр сдохнет, будет второе пришествие и апокалипсис, а эвент эмиттер никуда не денется.
Ну какой тут явит миру. ЖС это эвент драйвен язык.
Стримы на ноде забыл. Все backbone классы, но это не актуально уже. Наверняка еще все вуе компоненты и ангулярные, но я не знаю и не помню.
Во всём кроме перформанса. Только скоро завезут React Forget и тогда он ещё и по перформансу будет попускать никому не нужную китайскую подделку.
Можно повесить на корневой элемент и проверять на что клик, но тогда мы вываливаемся из парадигмы фреймворков, то есть императивно что-то там делаем с элементами, проверяем.
При этом важно, что обработчику клика по строке нужны данные из пропсов этой строки. Как тогда получить доступ к пропсам конкретной строки, если обработчик один на родительском элементе? Можно добавить нужные данные в какие-нибудь дата-атрибут, но это выглядит ещё хуже.
Что делать?
реакт по идее сам такое должен оптимизировать, не ?
Виртуализацию списка делать
Так то были заснайпленные скриншоты в пик популярности айти, а тут рандомный оффер открыл отличный показатель того, как обесценилось искусство в наше время.
Какой ещё нахер рынок США в Томске?
Пользовался. Ещё сам несколько раз писал и рефакторил разные реализации виртуальных списков.
Так вот, все либы это набор костылей и граблей, а виртуальный списки – это действительно одна из самых сложнейших задач, а не всякие поиски путей.
Вот типовая задача отрендерить большой список. Через пять минут встает задача отрендерить большую таблицу и мы получаем это.
Почему так? Почему веб в таком говне? Потому что реактомакаки умственно отсталые долбоебы. Не смогли всей индустрией написать нормальный список за 10 лет.
КАК СДЕЛАТЬ ЦЕПОЧКУ ПРОКСИ?
Допустим
let output = createProxy("proxy1:port1", "proxy2:port2");
// output: 127.0.0.1:1337 - и его дальше уже юзать можно для соединений и все запросы будут идти вот так Node.js -> proxy1 -> proxy2 -> Веб сайты и тд
Что тебя удивляет? data непонятно откуда берется, то что у тебя service определенного типа никак не говорит о том, что данные такого же типа.
То что чел конспект хороший написал никак не делает из него разраба.
Этот даун за час не смог сделать 2 типовые задачи.
Всё хуйня кроме @tanstack/react-virtual, у него нет лишнего обвеса, который только мешает, при этом есть всё чтобы сделать виртуальный список с нужным тебе UI-ем
Выглядит збс, спасибо.
Не знаю что на том же жс делать - фантазии нет. Покрасить что-нибудь при нажатии на кнопку? Это же меньше одного процента от всех возможностей жс. Как применять все, большинство или хотя бы половину возможностей языка?
Может есть список реальных проектов, а не "туду, калькуляторы и задрачивание алгоритмов"?
Дебик?
> задрачивания алгоритмов
Задрачивать их нужно, но только для собесов
> какие проекты делать?
Клон чего-то крупного. Спотифая, яндекс.музыки, вконтакте, двача, лайвлиба, аллаха.
А апишку можно взять либо у сервиса, клон которого делаешь, либо набросать моковую
тетрис сделай, будет интересно
Сделай админку.
Возьми нест, чтобы голову не ломать.
И делай на своем фреймворке лицо.
https://www.akveo.com/ngx-admin/pages/dashboard?theme=dark
Как вариант повтори все что тут есть. Всю админку.
А ты думал показать себя какой-то примитивной хуйней? Так ты не выделишься среди миллионов вкатунидзе.
Единственный недолгий, но сложный вариант, который приходит в голову, так это конструктор чего-то (сайтов) или канбан доска с перетаскиванием карточек
мимо ларавель + вуе-нухт фулхем
Не отвечай мне я тупею от твоих постов.
Как тупой вкатун может отупеть еще больше? Тебе дают советы и тебе ответило 3 разных человека, дебич, а ты еще выебуешься
РЯЯЯЯЯЯЯ, Я ХОЧУ ПОПРАКТИКОВАТЬСЯ, НО СОВСЕМ НЕМНОГО И ВКАТИТЬСЯ НА 300КК В СЕКУНДУ
В чем тупость? Тупость это спрашивать, чем заняться и пытаться выставить себя не вкатуном. Хотя вопрос абсолютно тупой и вкатунский
Там будут сеньоры помидоры это делать большой командой несколько лет. Ты или семенишь или от этого совета IQ доски рухнуло на 20 пунктов.
Какой же ты тупой, господи. Я не спрашивал совет практиковаться и не вкатун. Я просто мимо проходил и поссал тебе в рот. Съеби уже.
Тоже проиграл с этого.
Скинул ссылку на сайт где есть куча разных свистоперделок/фишек/формочек, по сути все что делаешь джун-фронт.
>Аря, че так многа, 10 лет пилить!
>>21439
Какие нахуй 10 лет?
Полгода - максимум. Это если еще хуи пинать. И если все пиксель в пиксель.
При этом ты и таблицу сделаешь, и дерево сделаешь, и попап сделаешь, и остальные 100500 штук.
Да и не обязательно все делать, но уже и все так ясно.
Я литерали за полгода +- подобную админку сделал.
При этом там не чисто демо функционала компонентов, а раб. страницы, коих +-150, + компоненты и тесты на каждый пук.
Ну, собственно, тут и видно какой ты не вкатун, раз по срокам так пробываешься.
Иди, крч, красивую тудушку сделай, попрактикуйся.
export let DEBUG = 1
а потом где-то меняю его значение, то в прочих файлах импортированное значение не обновится?
Или ты типа считаешься что если ты написал
<Grafik/>
<Todoshka/>
<Slider/>
Это ты считаешь за разработку админки? Если это всё из готового собрать то за полгода можно. А в чем тогда практика для вкатуна? Если с нуля делать, на голом реакте например то десять лет запросто.
Таблицу можно за день сделать.
Календарь за пару часов делается.
Что там еще? Карта? Ну, понятно, что карту с нуля не делают, ну а этот вкатун хотя бы раз карту интегрировал? Кластеры делал? Поиск?
Систему с гридами долго делать? Дня два. Будет уметь делать хуйню по фигме, чтобы в следующий раз дизайнер не вкидывал рандомные отступы.
Аккордеон 10 лет делать? Да вроде нет.
Редактор сложно что ли сделать? Ну ладно, пусть будет неделя. Хотя мне не понятно хули там неделю делать.
Бесконечный подгружаемый лист? Ну бля, это в каждой аппе есть, ну пусть посмотрит как это делается и за дня три разберется.
Табы пару лет пилить? Там чисто версткой можно.
10 лет разве что хуи пинать.
Понятно, что там вкатун, но админки-магазины - это буквально 90% работы джуна.
Где сложность? Сложно 150 страниц нашлепать и не засрать проект.
Двачую адеквата. Ленивые дауны-вкатуны совсем нихуя делать не хотят для сотыг
А вот эта вся хуйня невидимая. Я это увидел и у меня сразу же ассоциации с табами которые можно версткой только делать...
Ща буду пробовать. Алсо я не создавал sort key в моём email-index GSI. Может это поможет.
Нихуя не помогло. Ебал я в рот этот авс и его динамодб ёбаную, неудобное, говно. Я кончил. Работать с этой хуйнёй не хочу, просто не хочу.
Собственно, на мой взгляд самое сложное - редактор.
Куча нюансов. Да и хуй знает что пользователь тыкнет и в какой последовательности. А все это должно быть заранее обдуманно.
Разобрался сам. Точнее, проорал над тем, как оно сделано. Короче, нормального экспорта клиентского скрипта там нет, весь "экспорт" просто присваивается объекту window. Зачем огород с модулями, спрашивается. Хотя наверное по-другому универсальную либу и не сделать, из-за статической природы экспортов в ES6.
ну, понятно что мои "день-два" - это не время вкатуна, да и полурабочее говно будет.
я когда вкатывался и либу то иной раз не мог применить. тот же пример с календарем. пришлось в итоге либу пердолить чтобы сделать хотелку, чтобы под циферками были "тудушки".
до сиг пор висит на бегете полурабочая.
>>21594
>Короче, нормального экспорта клиентского скрипта там нет, весь "экспорт" просто присваивается объекту window.
Чел, ты ничего не перепутал?
https://socket.io/docs/v4/client-initialization/
import { io } from "socket.io-client";
В той вашей хуйне апач ечарт ваще-то
>чуть сложнее тудушки
Канвас это вообще перпендикулярно остальному джаваскрипту. Можно считать что это отдельный инженер. Всё равно что "а ну ты бекендер, МЛ это же бекенд, захуяч мне чатгтп. "
Джуны всегда оценивают задачу на два дня, а ебутся потом месяц. Сеньки оценивают на две недели, а ебутся три. Лиды оценивают на месяц, а делает задачу джун.
Тени пару лет делать надо будет.
Чому нет? Самое сложное в нем отрисовать дни по месяцам + покрасить дни из другого месяца.
Тыкнуть на день и получить валюес не так уж и сложно.
А, ну хотя выбор двух дат и покраска промежутка - да, тут сложно.
Паша, ты?
250-300, если в тир 1 компанию. В остальных 200-250.
120к, лучше 80к чтоб точно взяли
Лул эка ты слабак. У тебя было относительно простое задание. Хардкор там начинается с апи gateway, со step functions и со glue. Ты сам запутался в трёх соснах, не знаю что тебя так озадачило.
>Не, там всё норм, как и должно быть.
Нихуя это не норм. Я нигде вчера в интернете не нашел такой хуйни чтобы унаследоваться от литерал константы.
Ой да ну почему это. Вот можешь навести мышью на testResponse и он будет разный тип возвращать в зависимости от того какая строка поступила в функцию https://www.typescriptlang.org/play?#code/C4TwDgpgBAtiAq5oF4oHIwHtMEcCuEaUAPugM4BOEAdvoQFCiRQAK2dUqA3lrgQFxQywCgEtqAcwC+jJFADKVWgU5QulGnUHCxkmbOYAxPNQDGwUZmoAlCGSzUyEADzwAfKvhQIAD2A0AEzJ0Xjo0eigoAH5WdgIIqEEvX39qIPIlMITImMVNeMjIwWoIADcICnp6ADMTc0tqKH9hW3srJ1dvP0DguERINwAKMkwYCH6IJIAaIVGIW2A8CmpBAENqEABKQWMzCytWhw73NQSqReXZsYWl6np9ZuBD9ohBgCJQgjeZnjjJqDejzeUk2jDsTzsR1ebw0ygg3zUsK0AKBIKAA
Разве не очевидно что джуну работу просто не найти?
Сложно, непонятно, так еще и безперспективно.
Пчел, какое ты нахуй хочешь решение по своему огрызку со склеенным скриншотом? Не знаю, в типах проеблася, констреинты не расставил.
> as
Выкинул типизацию нахуй, поделил на ноль, гуд эффин джоб.
Я - рантье, и кодомакакинг для меня просто хобби, в котором мне (пока) интересно разбираться.
В api gateway я создал несколько роутов, и сделал кастомный авторайзер без каких-либо проблем. Проблемы с бд меня просто убили нахуй. Я с монго работал, там всё было +- норм с ньюансами, с постгрессом тоже, затупов серьёзных не было. Тут же сука, куче ошибок, апиха sdk- говнище ёбаное, классы с одинаковыми названиями есть и в @aws-sdk/client-dynamodb и в @aws-sdk/lib-dynamodb. Если что-то не то импортонул, будет ошибка, которая тебе нихуя не скажет, что не так. Дока 3 версии сдк из говна. на стаковерфлоу темы по 5-6 летней давности. Кароче, я не доволен инструментом очень сильно. Бывает такое, что используешь что-то и пригорает жопа, но в этот раз пригорело сильнее всего.
>Только скоро завезут React Forget
Он не ускорит работу реакта. Его задача - упростить работу макакам, чтобы те руками юзмемы не писали.
>> as
>Выкинул типизацию нахуй, поделил на ноль, гуд эффин джоб.
С каких пор type assertion делит типизацию на ноль?
Сделай нормальный тип, либо на жс пиши, зачем тебе тс?
interface UnknownServiceData {
readonly serviceType: string;
readonly data: unknown[];
}
interface InvoicesData extends UnknownServiceData {
readonly serviceType: "invoices";
readonly data: Invoices[];
}
interface WebsitesData extends UnknownServiceData {
readonly serviceType: "websites";
readonly data: Websites[];
}
type ServiceData = InvoicesData | WebsitesData;
И всё, чисто, понятно, типизированно.
> нагородил хуйни
> не справился с управлением костылесепеда
AS ЕСМЬ МАКАКА, ЦАРЬ И БОГ ТАЙПСКРИПТА
Я не автор скриншота. Ты так и не ответил про type assertion. Может это ты как раз макака?
Там ещё про useCallback. Многие ни то, ни другое не применяют там, где это было бы прибавку в перформансе. Так что когда выпустят React Forget, такие люди получает неплохую прибавку в перформансе без каких-либо заёбов.
Для чего и когда это гуд, а когда не гуд?
1) let x = "test"; let y = x as unknown as number;
2) let x = JSON.parse('{"a": 1}') as {a: number;}
3) let x = {a: 1} as {a: number;}
Ты же понимаешь, что as кроме полутора случаев, один из которых кривая стандартная типизация стандартных функций прототипов где не инферится тип - не нужен нахуй и является дичайшим нахуй костылём?
С того что он скинул - as там нахуй не нужен. Но он изобретает велосипеды, обмотал изолентой и ебанул клей момента, потому что собрал велосипед - а запчасти то остались!
>И сидеть по году без работу, попутно будучи выебанным вопросами про [] === ![] даже с годом-двумя работы?
Блять, двачую, на одном собесе начали спрашивать хуету вроде typeof NaN или undefined == null или 0.1 + 0.2 !== 0.3 такое чувство что я был на презентации топ-10 ебанутых трюков в JS
БАЗА ТРЕДА
рибята кто знает если смисял БЯБЯБЯБЯ БИБИБИ БУБУБУ
С чем ты там ебаться собрался? Нжинкс всё за тебя делает, ты просто нужный коныиг пишешь и всё. Это как спросить "стоитли ебаться с микроволновкой ддя разогрева еды???", ну если ты дегрод и для тебя это очень сложно, то конечно стоит
Да, забыл про нюанс с заводом: нужна вышка.
Ну так для готовки не только микроволновку (нжинкс) придумали. Нахуя вообще нжинкс юзать если некст сам себя хостит на ноде?
1) задудосят. нжинкс проще и бесплатней масштабировать
2) статику раздавать как следствие п 1)
3) взломают, шеллкодов в жопу напихают. некст слишком сложный и не тестированый, чтобы прямо в интернет торчать и ты туда еще говна из npm наваливаешь
4) нжинкс как реверспрокси. у тебя может быть 100500 приложений/микросервисов на одном домене
Ок, можешь домен проксировать в клаудфларе, но проксировать порты лучше и проще энджинксом, на клаудфларе это либо костыльно, либо за деньги.
Кланяйся
AWS это свою жопу отдать на хранение и обслуживание большому дяде. Дядя может в любой момент развернуться и уйти с твоей жопой.
Речь наверно шла об одном приложении на 80 или 443 порту. Если у тебя 100500 сервисов в интернет смотрят то естественно нужен реверспрокси
суть: что будет с фронтом после 2025 года? Заменят ли нейросеть? Будет ли избыток даже тех же миддлов на рынке фронта?
А фуллстак? Будет ли актуален стек react + node JS?
Пишу про ноду, потому что считаю, что чисто на одном фронте уж точно не вывезешь в дальнейшем.
Так что доп. вопрос: а что по node js? Или в бэк стоит выбрать что-то другое, петухон там и тд?
Ищи кабана, лучший стек и все прочее, но не забывай пилить свой пет, который может стать твоим личным бизом в будущем. Нода для последнего очень даже хороша, потому что не требует много времени и экспертизы на запил фич + говнокод на жаваскрипте от чатгпт проще внедрить в проект, чем говнокод на плюсах и т.п "взрослых" языках.
Так все же, что меня ждёт в 2025 как фронтовика джуно-миддла, дай Б-г, фулл стек?
Фуллстек всегда был хуже, это чисто для извращенцев, которым хочется за те же деньги продавать большее количество знаний.
Мидлов и так избыток, слишком много лоускиллов среди них. Хотя за низкий прайс и они устраиваются.
С нодой всё нормально кроме количества вакансий в постсоветском пространстве. Меня это не смущает, потому что я уже больше пяти лет работаю как раз бекендером на ноде, но для вкатывальщика будет профитнее тот же го. Нода на западе более популярна, для стартапов отлично подходит, а стартапы это почти всегда Америка.
Кароче, нахуй этот фронт. Как я понял, есть более актуальные сферы, то же го
фулкек ждет всех крудошлепов. нодерам в этом смысле попроще, потому что уних один один движок от гуглхрома на беке и фронте.
Будет тяжело устроится, рекомендую дрочить базу, то есть алгоритмы и литкод, после чего на последнем курсе универа устраиваться стажёром в КОТВАСЯ. А там уже до 300кк/нс продвинешься за несколько лет не меняя место работы при желании. В тинькове, например, в последнем наборе было 12к кандидатов, из них что-то в районе 150 взяли на стажировку.
На стажёра берут, если нормально алгоритмы знать. Альтернатива это пиздеть в резюме и надеятся что какая-нибудь тир 3 галера тебя не спалит и возьмёт за низкий прайс красить кнопки. Лучше уж стажёром в бигтех, там и зарплата будет не сильно меньше, и опыт лучше, и строчка в резюме.
Мне через 3 года 40 лет, бросаю бухать и думаю чем бы заняться, есть ли смысл тыкаться в жабускрипт вашу или нахуй оно уже не надо, тем более в моем нежном возрасте, и лучше петухона ковырять как средство от деменции?
Раньше сто раз пытался вкатываться, еще в универе ковырял хтмл, но дальше css не ушел.
Не особо умный, вообще не усидчивый, но к сраке лет понял что лучше понемногу но систематически, чем обосраться с наскока.
Мож чего посоветуете дедугану.
Попробуй тестировку (QA)
Hr на возраст смотрят, но работу можно в любом возрасте.
При всем уважении к возрасту, читай нью фаг тред и изучай направления в программировании прежде чем, куда-то тыкаться.
Совет хороший, жаль ни хаты в дс ни шизы.
>>22902
За компом я всю жизнь, и работаю и дома сижу, я имел в виду усидчивость в плане обучения и вката. Но я не столько о вкате а думаю просто чемто заняться полезным для мозга, но желательно конечно чтобы оно хоть как-то перспективно было, мало ли зайдет, сьебу за бугор скажу что я идентифицирую себя зумером и мне 15, пусть попробуют не взять на работу.
> При всем уважении к возрасту
Возраст сам по себе никакого уважения не заслуживает, это я как дед официально заявляю.
Qa не интересно, тут хоть какоето творчество, результат.
По поводу направлений я примерно в курсе, и очень сомневаюсь что смогу в чтото серьезное, где матан и всякие страшные вещи. Честно хуй знает за столько лет так и не понял чем хочу заниматься, по фронту вроде как просто считается относительно осваиваемое, вот в факе да и от других слышал что можно за год освоить уровень ждуна, в моем случае пусть два, но это уже чтото, а учить какието джавы или сисярпы непонятно зачем и для чего, хуй знает. Тут в крайнем случае хоть за еду можно будет поработать, если вдруг без работы остаться. Хотя перегрев конечно ебейший.
С другой стороны раз за столько лет даже цсс крепко не освоил, то щас то чего выебываться. Но как будто бы снова появилось желание, хуй знает.
Я в 30 вкатился, но ишачил для этого 2 года непрерывно. А щас пашу ещё больше, после работы на второй работе (самообучении)
С полного нуля на фулстака. Питон + JS.
Но Питон плоховатый вариант, потому что ну банально зайди в Пайтон тред на этой доске. Какие-то дебилы пишут тупые вопросы. И таких вкатышей миллион. А работы на Питоне мало и куча работы это всякое дерьмо где математика нужна.
Но у Питона есть одно очень важное преимущество. С него можно начать, будучи дебилом с 9 классами образования. Я таким был.
Я даже классы не понимал поначалу, что такое. Тупо не мог понять и всё ООП это. Какие-то инфоцыгане писали про эти чёртовы class Animal; экземпляр cat, dog класса Animal. Нихуя непонятно! И я не мог найти реальных примеров применения классов. Как меня это бесило.
Что бы со мной было, если бы я вкатывался в более сложный язык? Не знаю.
А вот благодаря Питону, я смог кое-чему научится и потом уже вошёл в ритм.
А что сложного в классе? Это типа как множество же.
Бля ну ты красава анончик в любом случае. То что успехов добиваются талантливые, это пиздеж - успеха добиваются упорные. Самодисциплина, систематичность, упорство.
Там была просто тупо математика, с минимумом алгоритмов.
Но поскольку у меня комп только в середине 1 курса появился, то я был страшно далек от всего этого. Я к появлению компа уже неплохо бухал и не только, сублимировал так сказать, потом в игры залипал разумеется. Да и вообще по ходу аутистом был непуганым, спасибо мамке за гиперопеку. Понимание чегото близкого к реальности началось годам к 25, но все силы были брошены на вылезаторство, сброс листвы и поиски тяночки, которая таки была найдена и так были проебаны еще 5 лет жизни, в начале 30х только освободился от этого наваждения, и уже вроде как пуксреньк, а время летит стремительно и вот уже 37.
Программируйте пацаны изо всех сил, не будьте дебсом как я.
>А что сложного в классе?
Это как спросить, а что сложного в этой вашей алгебре логики, теории множеств, ТФКП и прочем говне, в котором знакопеременный ряд даёт сумму в -1/12. А тут тебе говорят: лол, ты чё, абстракциями мыслить не можешь?
Или типичный выпускник микромакромехмата, который настолько привыкает к своим абстракциям и монадам, что не может посчитать в магазине сколько ему должны сдачи дать.
Алсо соглашусь с >>22970, примеры с котопсами - уебанские.
Алсо примеры с фигурами, от которых наследуют квадратики и круги - тоже.
Хоть я и вкатывался с языка со строгой статической типизацией, пропитанным ООП головного мозга.
мимо
Давай напишу иначе: когда человек с этим никогда не сталкивался, нужно сделать ментальную гимнастику, чтобы перестроить своё мышление и начать оперировать теми или иными сущностями.
С этим не спорю.
У меня есть определенный бэкграунд и даже чтото читал про программирование, поэтому конечно это не то же самое что мне бы это сказали после 9 класса.
Но все же мне не кажется концепция класса такой же сложной как то что ты перечислил, просто потому что это всего лишь одна концепция.
Щас чекнул еще про наследование, инкапсуляцию и полиморфизм, вроде тоже понятно. А вот если надо придумать как чтото посчитать, типа алгоритм, у меня ступор нахуй.
Надо было на фелософа идти, уже бы спился давно и не мучился, лол.
С классами всегда проблема у тех кто только начинает вкатываться в программирование. Тебе дают синтетические примеры на фигурах, собачках и кошечках. А ты должен из этого понять как адекватно выстраивать наследование или компоузить от разных интерфейсов. Наверх ещё какие-то абстрактные классы, абстрактные методы, виртуальное перегружаемое говно.
Также как в JS вкатунов постоянно ломает с понятия иммутабельности. Даже где-то в канторе ссылки/GC разъясняют на магических коробочках, которые друг на друга ссылаются.
Аналогично ломает, когда помимо референсов ещё и указатели на память появляются, а до этого человек не задавался вопросами как оно там работает и хранится. А что можно было указатель указателей сделать?
>Я даже классы не понимал поначалу, что такое. Тупо не мог понять и всё ООП это.
Правда в том, что никто на самом деле его не понимает. Кто говорит, что понимает, только думает или делает вид, что понимает. Множество известных в Computer Science специалистов об этом писали. Просто большиство людей, даже в сфере программирования, необразованные и глупые, поэтому ООП стало популярным.
https://habr.com/ru/companies/vk/articles/307168/
https://habr.com/ru/companies/ruvds/articles/428582/
Объектно-ориентированное программирование — чрезвычайно плохая идея, которая могла возникнуть только в Калифорнии.
— Эдсгер Вибе Дейкстра
К слову, Калифорния родина содомии и прочего разврата. В Калифорнии первой в мире открытый гей занял государственный пост и пошло движение за легализацию извращений.
> Так что когда выпустят React Forget, такие люди получает неплохую прибавку в перформансе без каких-либо заёбов.
Ключевое слово - "когда". Когда, блядь? Эту хуйню уже года 2 обещают по моему, чем разрабы реакта вообще заняты?
По ней почти больше года не было новостей, но весны этого года уже несколько раз почтили обновления уже скоро релиз должен быть
> АТД.
> Формально АТД может быть определен как множество объектов, определяемое списком компонентов (операций, применимых к этим объектам, и их свойств)
Ну и зачем ты пытаешься наебать дедушку? Не стыдно?
А как его вызывать. Допустим я передаю в дочерний элемент строку, дочерний должен её развернуть, а потом в паренте в слот запихнуть перевёрнутую строку
Хотя логика дебильная конечно принцип KISS не соблюден и мб это нахуй не надо.
Так ее можно в паренте перевернуть, почитал про слот и нихуя не понял, ты передаешь данные из чаелда в парент, чтобы обратно их в этот же чаелд передать?
> Так ее можно в паренте перевернуть, почитал про слот и нихуя не понял, ты передаешь данные из чаелда в парент, чтобы обратно их в этот же чаелд передать?
Да. Тоже считаю если есть какая-то логика которую тебе надо реализовать посередине парента и чайлда, её надо реализовать просто сбоку а не устраивать вот эти передачки хуй пойми откуда куда.
Даже в логике самого вуе это нахуй не надо. Там передаешь вниз пропы и вверх эвенты.
Надо. Классический пример - компонент кастомизируемой таблицы
<table-comp :rows="rows">
<table-head name="id">ID</table-head>
<table-head name="name">Name</table-head>
<table-column #id={{row}}> <span>{{ row.id}}</span> <table-column>
<table-column #name={{row}}> <span>{{ row.name}}</span> <table-column>
</table-comp>
мимо
<table-column #id="{row}"> <span>{{ row.id}}</span> </table-column>
<table-column #name="{row}"> <span>{{ row.name}}</span> </table-column>
должно быть конечно же
<table-comp :rows="rows">
<template #col-head-id>ID</template >
<template #col-head-name>Name</template >
<template #col-id="{row}"> <span>{{ row.id}}</span> </template >
<template #col-name="{row}"> <span>{{ row.name}}</span> </template >
</table-comp>
Извиняюсь . Не смог по памяти написать. Забыл синтакис вуя уже
В реакте это передаешь в таблицу функцию которая рисует ряд, в функцию прилетает id и всё остальное.
Да помню был вкатуном в мелкой галере лет 7 назад, наделал таблиц в админке на рякте табличных елементах. О гридах еще не знал. Все летало со скоростью катка по свежему асфальту...
Тут имеется ввиду, что абстрактный АТД это множество объектов, но мы говорим о конкретном АТД, а именно об объекте наследованном от класса. Это уже не множество, а один конкретный АТД. И под множеством подразумевается не математическое понятие множества.
https://react.dev/reference/react/cloneElement
> Legacy React APIs
>These APIs are exported from the react package, but they are not recommended for use in newly written code. See the linked individual API pages for the suggested alternatives.
нужно сделать квери чтобы отфильтровать по интервалу между ними, но в фаербейзе нельзя делать такое
https://firebase.google.com/docs/firestore/query-data/queries#compound_and_queries
Как такую кверю выполнить? Единственный вариант который вижу это сделать 2 запроса и объединить через Set(хуета)
Поясните, чем плоха таблица на та табличных хэлементах? И чем имитация на гридах лучше?
Хотя бы тем что таблицы это говно мамонта и плохо стилилизуется через css. Но в css завезли свойства для таблиц и можно любой див сделать с табличным поведением. Чем одно время успешно пользовались для создания адаптивных таблиц, до появления гридов.
Приятно познакомиться, Даун. Меня зовут Умница.
И почему на гридах "имитация"?
Кому надо? Что за шиза? Для SЕО? Так таблицы чаще делают во всяких админках и CRM-ках а не на сайтах. И часто тербование чтобы было респонзив, а не горизонтальные прокрутки.
Стедай такую таблицу на табличных элементах https://codepen.io/vasansr/full/PZOJXr
Таблица сделанная таблицей это халяль. Семантическая верстка слышал? Но ты просто новый ньюфаг и у тебя тряска от таблиц, можешь не высирать мнение полученное с помощью тряски, оно инвалид.
Чел, я твоих семантичных таблиц за семь лет понаделал столько... Все принципы хороши, пока они не противоречат здравому смыслу.
>все таблицы гридами делать
Откуда ты это вывел? Я только сказал что таблицы - это говно мамонта и у них quirck проведение. Может у тебя кейс где семантика важнее, или особенности рендеринга таблиц нужны, тогда использовать таблицы. Но бля почему если я делаю компонент для реюза в CRM, которая и на мобилках будет работать, наху мне твои таблицы?
ЗЫ. Упорутся одной идеей и несут ее в ущерб бизнесу. Вот из-за такой ригидной шизы у некоторых технарей кабаны предпочитают нанимать нормисов с гуманитарным мышлением....
Сходи сайт сверстай таблицами без дивов в дримвьювере. Преисполнишься.
Прихожу в проект, ничего не понимаю, джуны делают быстрей чем я.
Как вообще программировать в чужом проекте? Мне и года не хватит чтобы осознать каждый винтик проекта.
Я как муравей в чужом муравейнике.
Так я то спрошу, но у кабанчика складывается впечатление что я хуже джуна.
Уже попадал в такую ситуацию и сказал прямо что в проекте говно код, в итоге получил осуждение со стороны коллег, но уважение со стороны кабана.
Стукач ссученный! Еще и к начальству подлизываться, мужики не поймут. У нас на галере за такое мигом бы в жопу выебли!
Вот ты пришел в кафе, а тебе вместо чая налили мочу по ошибке.
Либо ты пьешь мочу и спасаешь повара от критики, либо стучишь и просишь переделать, поднимаешь всю кухню уши ...
ЧТО ТАКОЕ АБСТРАКТНЫЙ КЛАСС
@
ЭТО И ЭТО, А У ВАС ОНИ ИСПОЛЬЗУЮТСЯ?
@
НЕТ) ПРОСТО ПРОВЕРЯЮ ЗНАНИЯ, МЫ НЕ ИСПОЛЬЗУЕМ
>по ошибке
А потом в рассерженных чувствах выбегаешь на улицу и видишь вывеску над дверью "Кафе для мочехлебов"
@
ЧТО ТАКОЕ КОРОНАРНОЕ ШУНТИРОВАНИЕ
@
ЭТО И ЭТО, А У ВАС ОНО ИСПОЛЬЗУЮТСЯ?
@
НЕТ ПРОСТО ПРОВЕРЯЮ ЗНАНИЯ, МЫ НЕ ИСПОЛЬЗУЕМ. У НАС БОЛЕЕ СОВРЕМЕННЫЕ ТЕХНОЛОГИИ
Это важное знание, его проверяют потому что программист обязан это знать и использовать где надо.
Конечно. Они просто так ООП с классиками на реактовакансию спрашивают.
Там окажутся либо обособленные нитакусики с высокой культурой, либо у них там легаси, которому дай бог 5 лет, а не все 8. Где не слышали про тайпскрипт и функциональные компоненты.
Либо всё-таки это просто вопросы-фильтр.
Выбери свой вариант.
Реактопараша это надстройка над ЖС. Тебя полностью вправе гонять просто по знанию ЖС. А ТС это еще больше ООП чем ЖС и там знать что такое абстрактный класс еще важнее.
Вкатыш спок
Реактомакаки совсем погрязли в своём манямирке. Как будто не бывает вакансий с ангуляром.
Nest
Не нужно, а можно. Если ты хочешь оставить тип после компиляции, но не хочешь позволять, чтобы были инстансы этого "интерфейса", чтобы явно потребовать реализации некоторых методов. Явное лучше неявного. Если бы это был просто класс, то небоходимость реализации методов была бы неявной. Но можно заменить это парой класс и интерфейс с нужными методами. или класс котрый исключение бросает в методах. Только зачем такие костыли, когда тайпскрипт позволяет создать абстрактный класс c методами без имплементации.
Пчел, я шёл собеситься на реактомакаку. Лайвкодинг с РиАкТоВыМ приложением. Интервьювера интересовало только как побольше классов напихать, синглтоны, IoC, стратегии, билдеры, 3 столпа ООП (4, тащем-то) etc.
Там ни слова не было про ангуляр и nest.
А теперь объясни: нахуя?
Отвечать на их перезвон я не стал.
А таки зачем ви ето спгашивали?
Надо было заинтересовать. А так неста у них нет, доднета с асп у них нет, спринга у них нет. Есть путонисты сатанисты. Ну и нахуя?
Ну вот пусть там и сидит. Сейчас бы менять галеру на галеру с несвежим легаси за 15% к миске риса.
бамп
Давайте мне кейс где во фронте может потребоваться 3 уровня наследования? 1 уровень редкость...
Я только вчера смотрел JS код реакт приложения, от которого веело бэкендом ООП головного мозга.
Чел просто на ровном месте создал фабрику, а потом переиспользовал фабрику во второй фабрике.
Нужно только ООП обезьяну найти - а дальше макака всё сделает сама.
Не совсем классическое реакт приложение для саетов, больше как пример встройки кастомного интерфейса в webview другого софта, но уже этого достаточно.
1) useRef и useEffect. В эффекте кенселим старую функцию, присваиваем рефу новую. Но при этом получается что в компоненты которые уже отрендерены ушла старая ссылка.
2) useRef и useMemo. Прямо в мемо кенселим старую функцию, присваиваем рефу новую и его же возвращаем. Теперь в компонентах свежая функция.
Но оба варианты выглядят как говно. Как сделать более ИДИМАТИЧНО? Сколько вожусь с реактом, до сих пор на место не стала семантика этих примитивов. В мемо с какого то хуя нельзя получить прошлое значение (которое и так блин кешируется реактом), а эффект работает только после ререндера. И если нужно подредачить стейт на основе уже НОВЫХ пропсов, то всё равно это выносят в эффект, где обновляют стейт, в итоге получаем лишний рендер просто с нихуя. Почему реакт такое говно?
В ts абстрактные классы можно использовать для DI, если тебе нужен тип зависимости в рантайме знать
Хоть и звучит это говнокодно...
Собственная либа набодобие jquery
У меня так же, половина непонятный говнокод, кабан ставит задачи хуй пойми как, на кофейной гуще надо гадать че он хочет. А остальные сидят на митах с таким еблом будто понимают че происходит. Я потом спросил у одного че за фигня, он говорит что все тупят и не понимают, но делают ебало что все на мази.
А тесты есть? Если хотя бы не думать о том как тестировать код который пишешь, то получается шляпа.
Какие тесты. Там разработка уровня "Надо сделать к вечеру я обещал". Лишь бы как-то работало. Там и требований к оформлению кода нет, как и минимальный рефакторинг. Не то что тесты.
Ну бывают проекты таких размеров где один человек вообще не способен разобраться, там делят на зоны ответственности и каждый копошится в своей периодтчиески её расширяя.
Если это не твой случай, то не ссы, втянешься.
Это называется "сделали, отдали и забыли". Тоже был в таких проектах, так себе опыт. Хороший продукт так сделать не получится.
Меня больше бесят персонажи которые 20 лет опыта имеют, на их горбе проехало 5 галер, но они считают себя мидлами потому что эйчарка им про софтскилы сказала.
Да, демпингующие попущенцы это самый рак отрасли
Гопота, кст, говорит, что нет - низя.
Sorry, I cannot fulfill this request as it involves dynamically capturing and displaying console messages in real-time, which is beyond the capabilities of this platform.
Всё правильно, катимся по законам Натана Мирвольда. Больше говнокода для утилизации ресурсов.
Че там происходит в этом шакальном мыльце?
Больше негде. Программисты нигде не нужны.
У меня компонента на свелте в проде. Думаю с полтреда хоть раз да взаимодействовало с ней.
Thank you kindly for reporting in, sir.
И где тут киллерфича? Эта фича в рякте со времен как только сср появился есть.
window.console.log = (...args) => document.body.append(JSON.stringify(args))
Я был на собесе в одну контору галера, которая его юзает. При этом они требовали его обязательное знание, с чем я успешно проебался. В итоге пошел в другую контору.
>FSD
Вы про нее говорите? Видос смотрел про нее, выглядит лучше чем дефолтное ничего, но хуже чем чистая архитектура от дяди боба, имхо
Кабан из твоего предложения ни слова ни поймёт.
Давненько задаюсь вопросом. Только не надо туманной ебалы про реактивность.
Вот например JQuery мне вполне понятно какую проблему решало - совместимости зоопарка разных браузеров. Сейчас она немного рассосалась из-за монополизма хрома, а проблема обратной совместимости решена тем что на нее тупо положили хуй.
>Удобная шаблонизация
Что ты вкладываешь в это? Удобнее чем тысячи шаблонизаторов до реакта?
Напиши реальную проблему которую тебе помог решить React.
>Что ты вкладываешь в это?
JSX
>Удобнее чем тысячи шаблонизаторов до реакта?
Именно
>Напиши реальную проблему которую тебе помог решить React
До него были Meteor, Ember, Backbone/Marionette, Angular 1, они выполняли похожие задачи, только работать с ними было очень неудобно и очень медленно по сравнению с реактом. Но в 2023 году у реакта куча альтернатив со схожей или даже лучшей продуктивностью и удобством разработки. Для меня главное чтобы был JSX, пока лучше него не придумали. Шаблоны ангуляра более всратые, у вью тоже. Надеюсь на взлёт Solid, он в принципе лучше реакта во всём, и перформанс превосходный, разве что маленькое комьюнити и количество библиотек. Ну или может авторы реакта оптимизируют перформанс, завезут сигналы, так было бы идеально.
Так в чем удобство то шаблонов?
Еще раз вот смотри -
Мне нужно чтобы сайт работал в разных браузерах и не писать тыщу ифов (и 2000е на дворе) - я беру jQuery
Мне нужно XXX - я беру React.
Что можно подставить вместо XXX?
>проблема обратной совместимости
Там это, недавно пробегал хуй, у которого флекс врапы в фаирфокси, 9 лет как висящие в фулл супорте, работали через жопу, не так как в хроме.
Про какую ты блядь обратную совместимость? Обатная совместимость нужна только сафари ретроградам, которые из-за старого железа обновить браузер не могут. Потому что ОС не даёт. Лол.
>>27505
Жирич плез.
>Мне нужно чтобы сайт работал в разных браузерах и не писать тыщу ифов (и 2000е на дворе) - я беру jQuery
Какой jquery нахуй, ты ебанутый? Для поддержки старых браузеров есть куча нормальных инструментов, причем в реакт и прочие модные фреймворки они встроенные.
Потому что иначе твою жопу через webp вскроют, хочешь ты того или нет. А браузер обновится сам. Иди нахуй.
Лол, какой дерзкий любитель анального зонда, готов глотку перегрызть за сапог барина в жопе.
Хуй тебе, а не ещё кормёжка. Иди нахуй.
Необязательно так, но что-то вроде
obj = {}
['raz', 'dva'].foEach(el => obj[el] = 'test')
obj.raz // ИДЕ видит, что свойство есть в объекте
Или только TS/JSDoc?
Предположим, есть один слайс - отвечает за установленные чекбоксы. И есть другой - отвечает за поисковый текстовый инпут.
В слайсе чекбоксов состояние - массив выбранных чекбоксов. Там есть редьюсер, который добавляет определенный чекбокс и второй редьюсер, который сбрасывает все чекбоксы (тупо инитиалстате возвращает).
В слайсе поискового импута состояние - строка. Тамошний редьсер устанавливает эту строку.
Вопрос в том, что мне\е нужно сделать так, что если устанавливается какой-то чекбокс, то инпут сбрасывается (вызывается его редьюсер с пустой строкой) и наоборот - если устанавливается текст из инпута, то все фильтры сбрасываются (вызывается его редьсер по сбрасыванию фильтров).
Кое-как смог сделать через импорт редьюсеров одного слайса в другой и использование в extraReducers. Но мне приходится дублировать логику, ибо хз как вызвать, например редьюсер сброса чекбоксов внутри extraReducers.
Да и вообще вот эти взаимные импорты из одного слайса в другой не нравятся. Как это сделать правильно?
Реакт это всратая попытка перейти от императивного подхода к декларативному. Ангуляр и вуе нормальная декларативность например. Нокаут первая такая либа. Зачем это надо? Чтобы не выполнять одинаковую работу по перекладыванию жисона в хтмл.
Вообще в институтах преподавать бы историю развия фреймворков как отдельный предмет, а мне дебичи в /б/ все ещё доказывают что матан нужен ололо. Ещё можно это спрашивать как вопрос на собесе.
Но если так делать, то все будут знать причины почему реакт такое всратое говно и использовать его не надо. И у нас была бы совсем другая индустрия.
p.s. Решено. Chalk умеет и в браузер.
> знать причины почему реакт такое всратое говно
Был такой фреймворк backbone. И адский сотона добавил туда функцию render. И она считалась мной например тупо антипаттерном, потому что она медленно работала все что render сгенерит вставляется в хтмл с помощью медленной вставки innerHTML = render(), потому что надо было писать хтмл внутри джаваскрипта(привет ебучий жсх).
Дебичи из Фейсбука напротив делали все через render. И чтобы это говно так не лагало сделали виртуальный дом.
import _ from "underscore"
т.е. не указывать никакой путь, только название.
Так вот можно ли сделать так же с каким-то модулем не из package.json?
Например, я хочу, чтобы мой модуль из "./lib/utils/somemodule.js" можно было импортировать так:
import myModule from "somemodule"
Этого можно добиться, не заливая модуль в npm?
А можно ли этого добиться на клиенте?
На инпут устанавливаешь стейт чекбоксов в "ни один не отмечен", на выделение чекбокса устанавливаешь стейт инпута в "ничего не введено".
Где тут взаимные импорты между редюсерами? Это обычные диспатчи из компонентов.
Я бы не спрашивал, если бы смог нагуглить. И кажется мне, что задача не решается никак, особенно на клиенте.
Мне кажется архитектура нужна для другого, и FSD этого не дает. Грубо говоря в приложении есть 2 компонента - предметная область (ядро) и представление данных (у нас это react). Всё что происходит в react по большому счету не важно, в хорошей архитектуре должна быть возможность заменить react на vue, svelte, angular без переписывания большей части кода, или даже перенести код на noodejs и дергать API вместо кнопок. А FSD это новое распихивание по папочкам, ну ок, можно применить.
Вот этот мужичек мне нравится как объясняет:
https://www.youtube.com/watch?v=Z0Ocd8RmiWk&ab_channel=DevMastery
>срякт
>архитектура
Выбери что то одно. Говорить про архитектуру когда у тебя один глобальный объект с состоянием, который мутирует любая точка приложения... ну это как думать о том какие трусы себе надеть, зная что через минуту они будут в поносе из-за недержания.
Если не нравится явный диспатч из компонента, то делай это неявно серез редукс-саги.
Как же меня все это заебало, анон. Я тоже был адептом чистой аритектуры и всего прочего. Но это какая-то шиза, не соответствующая реальности. В реальности лучшая стратегия, накостылить решения, срубить бабки, пока есть спрос и дальше чилить. Чужой проект превратится в говно независимо от твоего желания, а если это твой проект, то ты потеряв время и силы на архитектурную чистоту не достигнешь комерческого результата.
Лучший критерий это удобство добавления фич, а не создавать чистые архитектуры в ваккуме, ради переписывания с реакта на ангуляр и обратно каждый день.
минимум изоляции от фремворка нужен конечно, потому что фреймворк обновляется, но если вдруг в новом реате скажут что хуки деприкейтед, то тебе такое количество микролапши придется переколбашивать, что выделение из хуков бизнеслогики это просто детский сад.
>FSD кто-то использует?
херня, не советую.
Джуны внедряют, чтобы почувствовать в себе "ЧСВ-архитектора"
Люди во главе сами не понимают чего хотят
Люди во главе сами не понимают как должна работать методология
https://github.com/feature-sliced/documentation/discussions?discussions_q=sort%3Atop
Почитайте, люди путаются в 5 сущностях и генерируют 100+ сообщений на тему.
У тебя приложение на 50-90 страниц и 1000 компонентов?
Если нет то не парься и просто делай pages components api hooks
И пойми одно, для каждого проекта свои тонкости.
У вас никогда не получится ужать все проекты под один FSD, всегда будут индивидуальные особенности.
Ух как губежки вытянул, сразу видно по хуйцу истосковался
>вот в реальных ситуациях
>но показывает все равно кнопкосчетчик
типикал архитут
Если уложить видос в два слова - primitive obsession. На самом деле счетчик не число, а объект с максимальным/минимальным значением и всякими там сообщениями.
Ну в целом то архитектутная мысль правильная что любая сложная логика должна быть отвяазана от всего на свете и быть как бы центром системы. Проблема только в том что этой самой логики у рядового анона с гулькин хуй. А 99% кода составляют связки говнофреймворков с говнофреймворками. И сложности уровня "как сделать чтобы у меня текст пропадал в импуте когда я щелкаю по чекбоксам и наоборот" охуеть просто.
Почему медленно, ты всю страницу целиком что ли перерисовывал? Не пробовал менять только то что нужно?
>Не пробовал менять только то что нужно?
Именно так адекваты и делали, а говнокодеры юзали render.
Тебе не нужно редьюсеры нигде трогать кроме как в экшенах, в компоненте чекбокса просто выживаешь экшен, который сбрасывает стейт инпута, и в компоненте кнопки поиска вызываешь экшен сброса чекбоксов
1) Предлагаешь все железо старше 10 лет на свалку нести?
2) Сколько раз за 10 лет переписывал компоненты на новый нескучный синтаксис?
Я так не делал. Я тебе объясняю что весь реакт это эволюция говнокодерского антипаттерна, функции render из бэкбона.
>1) Предлагаешь все железо старше 10 лет на свалку нести?
Зачем? На компе с каким-нибудь кор 2 дуо нормально запускается последний хром. Не надо просто по 1000 вкладок открывать.
>2) Сколько раз за 10 лет переписывал компоненты на новый нескучный синтаксис?
1.
И в чём проблема? Алсо, лет 5 назад уже перестали писать функцию render, просто возвращают JSX из функции компонента.
Я не говорю про функцию рендер из реакта, я говорю про функцию рендер из бекбона. У нас урок истории, иди почитай что это в доку бекбона. Это рак потому что 1. медленно работает. 2. Надо писать хтмл в джаваскрипте.
Первую проблему они решили а вторую нет.
>Надо писать хтмл в джаваскрипте
Не надо, пишешь JSX, это другое.
>Первую проблему они решили а вторую нет.
В чём проблема?
>У нас урок истории
Помню было время ковырялся в этом говне. Нокаут еще был. Но как тогда так и сейчас не могу понять - нахуя это все нужно.
>The default implementation of render is a no-op.
Что то тут не сходится с твоими охуительными историями.
Если она ничего не рисует, то вьюха просто к дому подсасывается. А если рисует, то рисует.
Суть в том что в этом методе программист сам решает что менять, а что не менять и как именно. Так что никакой эволюции.
>Ну бекбон какую-то "архитектуру" предоставлял
- Хочу вэб приложуху написать, да что то никак
- А в чем проблема?
- Да вот бы мне кто предоставил хоть какую-нибудь архитектуру
https://stackoverflow.com/questions/17438832/how-to-render-backbone-js-view-properly
Вот типичный бекбоновский код, папа вашего жсх. Узнали? Согласны?
Ну вот была jQuery чтобы удобно с домом, работать underscore чтобы удобно работать с данными, и бекбон который как-то через жопу их слепливает.
Из jQuery в ЖС искаропки переехал querySelectorAll, промисы. Из undescore все методы пердолинга массивов.
Ты меня с кем то перепутал, я то все пытаюсь понять нахуя реакт вообще нужон. Похоже разве что в идейном плане - додики не способные написать хоть немного адекватный код объясняют друг другу как творить невероятную хуиту.
А из бекбона нихуя не переехало потому что это бесполезная хуита нужная только чтобы стрелять себе по яйцам?
>программист сам решает что менять,
Я тебя носом ткнул в мету как программист решает менять. Вот так он решает менять как на картинке написано.
Render рисует ВСЮ вьюху по определению. Если ты хочешь по клику каунтер инкрементировать, то можно или сделать что-то такое $(".counter").text(this.model.get("counter")) или вызвать this.render()
Из бекбона переехала в реакт функция рендер.
> бесполезная хуита нужная только чтобы стрелять себе по яйцам?
Так точно.
>Render рисует ВСЮ вьюху по определению.
Деб, ты умственно неполноценный? Я тебе цитату из доков кинул где написано что "по определению" render не делает нихуя.
>Это всего-лишь твоё говноедское мнение
Как и у хейтеров JSX их неприязнь тоже всего лишь их говноедское мнение.
Это именно он. Я роды принимал.
>"по определению" render не делает нихуя.
Не по определению а по умолчанию. И в этом случае бекбон вьюха просто подсасывается к элементу на странице, типа гидрейтит его. А функция рендер еще и нарисовать может. А если ты маньяк, то еще и перерисовываешь всю вьюху функцией рендер на каждое изменение данных.
И всё это мета, совершенно обычное дело которым болеет каждый второй сайт.
>Реакт это всратая попытка перейти от императивного подхода к декларативному.
Если копнуть нормально то окажется что различия между этими подходами высосаны из одного места, штудентик. Как и большинство терминологии в cs.
> можно это спрашивать как вопрос на собесе
Так это со 100 вероятностью спрашивают же.
>Зачем мы выбрали реакт?
А приходится краснеть и мямлить что то там про реактивность. Я же не скажу в глаза - вы че ебанутые? Вы же выбирали его за каким то хуем, это я должен у вас спрашивать зачем.
Покинь профессию.
Так я правильно понимаю или нет -
в функции render можно изменить только то что тебе нужно
вместо того того чтобы переписывать весь innerhtml.
И внезапно причина которая не позволяет этого сделать ровно одна единственная - так в примере написано, а мозгов у разрабов не хватает чтобы делать как то по другому (и ты один из них).
Функция render запускается 1 раз в конструкторе вьюхи и вручную когда хочешь.
>в функции render можно изменить только то что тебе нужно
Нельзя, для этого был написан виртуал дом. Если бы можно было, то виртаул дом не был бы написан.
задавай себе вопрос, почему в европе\сша ничего не придумывают?
чел, бери и разбивай как сам считаешь нужно
page, components, api, service , shared
этого достаточно и никто никогда не запутается.
Для реализации подгрузки новых данных по скроллу с виртуализацией в React и использованием React Query, вы можете воспользоваться следующим подходом:
1. Установите необходимые библиотеки:
```bash
npm install react-query
```
2. Создайте компонент, который будет отображать список данных. Например:
```jsx
// ListComponent.js
import React from 'react';
import { useInfiniteQuery } from 'react-query';
const fetchData = async (key, page = 0) => {
// Здесь нужно реализовать логику загрузки данных с сервера.
// Например, использовать fetch или axios.
const response = await fetch(`/api/data?page=${page}`);
return response.json();
};
const ListComponent = () => {
const { data, fetchNextPage, hasNextPage, isFetchingNextPage } = useInfiniteQuery(
'data',
fetchData,
{
getNextPageParam: (lastPage, allPages) => {
// Возвращает следующую страницу данных.
// Зависит от структуры данных, которую возвращает ваш сервер.
return lastPage.nextPage;
},
}
);
return (
<div>
{data.pages.map((page, pageIndex) => (
<React.Fragment key={pageIndex}>
{page.map((item) => (
<div key={item.id}>{/ Отображение данных /}</div>
))}
</React.Fragment>
))}
{hasNextPage && (
<button onClick={() => fetchNextPage()} disabled={isFetchingNextPage}>
{isFetchingNextPage ? 'Загрузка...' : 'Загрузить еще'}
</button>
)}
</div>
);
};
export default ListComponent;
```
3. Используйте компонент `ListComponent` в вашем приложении:
```jsx
// App.js
import React from 'react';
import { QueryClient, QueryClientProvider } from 'react-query';
import ListComponent from './ListComponent';
const queryClient = new QueryClient();
const App = () => {
return (
<QueryClientProvider client={queryClient}>
<div>
<h1>Подгрузка данных по скроллу с виртуализацией</h1>
<ListComponent />
</div>
</QueryClientProvider>
);
};
export default App;
```
В этом примере используется библиотека `react-query` для управления состоянием запросов к серверу. Компонент `ListComponent` использует хук `useInfiniteQuery` для обработки запросов по скроллу и виртуализации данных. Обратите внимание, что логика `fetchData` и структура данных могут отличаться в зависимости от вашего сервера.
Для реализации подгрузки новых данных по скроллу с виртуализацией в React и использованием React Query, вы можете воспользоваться следующим подходом:
1. Установите необходимые библиотеки:
```bash
npm install react-query
```
2. Создайте компонент, который будет отображать список данных. Например:
```jsx
// ListComponent.js
import React from 'react';
import { useInfiniteQuery } from 'react-query';
const fetchData = async (key, page = 0) => {
// Здесь нужно реализовать логику загрузки данных с сервера.
// Например, использовать fetch или axios.
const response = await fetch(`/api/data?page=${page}`);
return response.json();
};
const ListComponent = () => {
const { data, fetchNextPage, hasNextPage, isFetchingNextPage } = useInfiniteQuery(
'data',
fetchData,
{
getNextPageParam: (lastPage, allPages) => {
// Возвращает следующую страницу данных.
// Зависит от структуры данных, которую возвращает ваш сервер.
return lastPage.nextPage;
},
}
);
return (
<div>
{data.pages.map((page, pageIndex) => (
<React.Fragment key={pageIndex}>
{page.map((item) => (
<div key={item.id}>{/ Отображение данных /}</div>
))}
</React.Fragment>
))}
{hasNextPage && (
<button onClick={() => fetchNextPage()} disabled={isFetchingNextPage}>
{isFetchingNextPage ? 'Загрузка...' : 'Загрузить еще'}
</button>
)}
</div>
);
};
export default ListComponent;
```
3. Используйте компонент `ListComponent` в вашем приложении:
```jsx
// App.js
import React from 'react';
import { QueryClient, QueryClientProvider } from 'react-query';
import ListComponent from './ListComponent';
const queryClient = new QueryClient();
const App = () => {
return (
<QueryClientProvider client={queryClient}>
<div>
<h1>Подгрузка данных по скроллу с виртуализацией</h1>
<ListComponent />
</div>
</QueryClientProvider>
);
};
export default App;
```
В этом примере используется библиотека `react-query` для управления состоянием запросов к серверу. Компонент `ListComponent` использует хук `useInfiniteQuery` для обработки запросов по скроллу и виртуализации данных. Обратите внимание, что логика `fetchData` и структура данных могут отличаться в зависимости от вашего сервера.
Прошу прощения за путаницу. Если вы хотите использовать Redux Toolkit (RTK) для управления состоянием в вашем приложении React вместо React Query, вот как вы можете реализовать подгрузку данных по скроллу с виртуализацией с использованием RTK Query.
1. Установите необходимые библиотеки:
```bash
npm install @reduxjs/toolkit react-redux
```
2. Создайте ваш слайс с использованием `createSlice` и `createAsyncThunk`:
```jsx
// dataSlice.js
import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';
export const fetchData = createAsyncThunk('data/fetchData', async (page) => {
// Реализуйте здесь логику загрузки данных с сервера
const response = await fetch(`/api/data?page=${page}`);
return response.json();
});
const dataSlice = createSlice({
name: 'data',
initialState: {
data: [],
status: 'idle',
error: null,
page: 0,
},
reducers: {},
extraReducers: (builder) => {
builder
.addCase(fetchData.pending, (state) => {
state.status = 'loading';
})
.addCase(fetchData.fulfilled, (state, action) => {
state.status = 'succeeded';
state.data = state.data.concat(action.payload);
state.page += 1;
})
.addCase(fetchData.rejected, (state, action) => {
state.status = 'failed';
state.error = action.error.message;
});
},
});
export default dataSlice.reducer;
```
3. Создайте компонент, который будет отображать список данных:
```jsx
// ListComponent.js
import React, { useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { fetchData } from './dataSlice';
const ListComponent = () => {
const dispatch = useDispatch();
const { data, status, error, page } = useSelector((state) => state.data);
useEffect(() => {
if (status === 'idle') {
dispatch(fetchData(page));
}
}, [status, dispatch, page]);
const handleScroll = () => {
// Реализуйте логику определения, что пользователь прокрутил вниз и вызовите fetchNextPage
// Например, используя window.scrollY, window.innerHeight и document.documentElement.scrollHeight
};
useEffect(() => {
window.addEventListener('scroll', handleScroll);
return () => {
window.removeEventListener('scroll', handleScroll);
};
}, []);
return (
<div>
{data.map((item) => (
<div key={item.id}>{/ Отображение данных /}</div>
))}
{status === 'loading' && <p>Загрузка...</p>}
{status === 'failed' && <p>{error}</p>}
</div>
);
};
export default ListComponent;
```
4. Используйте компонент `ListComponent` в вашем приложении:
```jsx
// App.js
import React from 'react';
import { configureStore } from '@reduxjs/toolkit';
import { Provider } from 'react-redux';
import dataReducer from './dataSlice';
import ListComponent from './ListComponent';
const store = configureStore({
reducer: {
data: dataReducer,
},
});
const App = () => {
return (
<Provider store={store}>
<div>
<h1>Подгрузка данных по скроллу с виртуализацией</h1>
<ListComponent />
</div>
</Provider>
);
};
export default App;
```
Этот пример использует Redux Toolkit и `createAsyncThunk` для управления состоянием запросов к серверу. Логика загрузки данных и обработка скролла реализуются в соответствующих частях кода.
Прошу прощения за путаницу. Если вы хотите использовать Redux Toolkit (RTK) для управления состоянием в вашем приложении React вместо React Query, вот как вы можете реализовать подгрузку данных по скроллу с виртуализацией с использованием RTK Query.
1. Установите необходимые библиотеки:
```bash
npm install @reduxjs/toolkit react-redux
```
2. Создайте ваш слайс с использованием `createSlice` и `createAsyncThunk`:
```jsx
// dataSlice.js
import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';
export const fetchData = createAsyncThunk('data/fetchData', async (page) => {
// Реализуйте здесь логику загрузки данных с сервера
const response = await fetch(`/api/data?page=${page}`);
return response.json();
});
const dataSlice = createSlice({
name: 'data',
initialState: {
data: [],
status: 'idle',
error: null,
page: 0,
},
reducers: {},
extraReducers: (builder) => {
builder
.addCase(fetchData.pending, (state) => {
state.status = 'loading';
})
.addCase(fetchData.fulfilled, (state, action) => {
state.status = 'succeeded';
state.data = state.data.concat(action.payload);
state.page += 1;
})
.addCase(fetchData.rejected, (state, action) => {
state.status = 'failed';
state.error = action.error.message;
});
},
});
export default dataSlice.reducer;
```
3. Создайте компонент, который будет отображать список данных:
```jsx
// ListComponent.js
import React, { useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { fetchData } from './dataSlice';
const ListComponent = () => {
const dispatch = useDispatch();
const { data, status, error, page } = useSelector((state) => state.data);
useEffect(() => {
if (status === 'idle') {
dispatch(fetchData(page));
}
}, [status, dispatch, page]);
const handleScroll = () => {
// Реализуйте логику определения, что пользователь прокрутил вниз и вызовите fetchNextPage
// Например, используя window.scrollY, window.innerHeight и document.documentElement.scrollHeight
};
useEffect(() => {
window.addEventListener('scroll', handleScroll);
return () => {
window.removeEventListener('scroll', handleScroll);
};
}, []);
return (
<div>
{data.map((item) => (
<div key={item.id}>{/ Отображение данных /}</div>
))}
{status === 'loading' && <p>Загрузка...</p>}
{status === 'failed' && <p>{error}</p>}
</div>
);
};
export default ListComponent;
```
4. Используйте компонент `ListComponent` в вашем приложении:
```jsx
// App.js
import React from 'react';
import { configureStore } from '@reduxjs/toolkit';
import { Provider } from 'react-redux';
import dataReducer from './dataSlice';
import ListComponent from './ListComponent';
const store = configureStore({
reducer: {
data: dataReducer,
},
});
const App = () => {
return (
<Provider store={store}>
<div>
<h1>Подгрузка данных по скроллу с виртуализацией</h1>
<ListComponent />
</div>
</Provider>
);
};
export default App;
```
Этот пример использует Redux Toolkit и `createAsyncThunk` для управления состоянием запросов к серверу. Логика загрузки данных и обработка скролла реализуются в соответствующих частях кода.
пиздец, с редаксом почти в 2 раза длиннее ответ
Клоун, я бы тут не спрашивал ответа, если бы уже не сделал всё тоже самое что и ты сейчас делаешь, иди на хуй. Джаваскрипт параша, хр тьфу.
Как уже сказал анон, самый адекватный способ - виртуализировать, если таблица просто рендерит контент, то довольно быстро прикрутить можно.
Напишешь на чистом js это "правильно"? Спорим ты просто хуевый инженер, который хочет, чтобы за него все решили и сделали другие, а твоя задача фрустрировать и кадаться говном.
Из того, что можно будет положить в гитхаб и получать респект - таблица в тыщей записей, для каждого роу может быть вложенность других роу, их можно перетаскивать друг в друга. Если влоб это сделать, работать будет хуево, нужна виртуализация. Просто если делать клон чего-то большого, то хуй кто смотреть будет толком, ну и просто херова туча времени на верстку. А такая таблица это минимум кода и много интересных технических моментов, я так понимаю ты только вкатываешься, поэтому будет полезным в качестве демонстрации скилов.
зачем мне че-то писать? зачем на чистом? шиз, блять, возьми нормальный инструмент и таких проблем не будет.
еще, блять, попроси меня на паскале эту хуйню сделать, чтобы твои ряктопарашовские чувства были отомщены.
Конечно. Даже в этом треде на что правильное решение на реакте.
Есть 2 вида правильных решений. Полностью кастомайзбл - делай чё хочешь. Или компоненты на любой случай жизни, для списка, для таблиц, для неба, для Аллаха.
А вот это говнина когда вот тебе только дивы, хочешь таблицу - ебись.
А чё, норм. Видел чела твиче, который хуярит на паскале для души/фрелонс заказ.
Не проще ли было бы отслеживать изменения и тогда ререндерить?
Например, у меня есть массив, я меняю в нем один элемент, Реакт не вызывает ререндер, т.к у него переменная массива указывает на тот же самый массив (который я изменил).
Чтобы пошел ререндер, нужно копировать массив и уже в нем менять, что тебе надо. Тогда ссылка поменяется и Реакт вызовет ререндер.
Но это же неэффективно.
только сел учить Реакт
Потому что в твоём массиве может быть 1000 элементов, состояние не обязательно может измениться после вызова диспатча.
Из массива убирают фильтром 3, 50, 777 элементы. Отследи эти изменения? Надо пройтись теперь на изменение состояния по всему массиву и сравнить элементы. А что делать с ключами начиная с 3-го индекса, там же элемент убрали и нумерация поменялась? Считать что изменилось всё начиная с 3-го элемента? Ведь соответствие индекс-значение нарушено.
А потом при рендере реакт ещё будет сравнивать отдельно, что поменялось в списке, где индексы обновить, где пропы.
А вложенный мемоизированный компонент вместо проверки ссылки твоего массива также должен будет проверить все элементы на изменения массива. А он ещё может и не последним в цепочке наследования оказаться.
Добавь программно элемент в HTML DOM используя только питон. На задачу 1 минута.
from bs4 import BeautifulSoup
# Create a sample HTML document
html = """
<html>
<body>
<h1>Hello, World!</h1>
<div id="content"></div>
</body>
</html>
"""
# Parse the HTML document using BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
# Create a new HTML element
new_element = soup.new_tag('p')
new_element.string = 'This is a new paragraph'
# Append the new element to an existing element in the DOM
content_div = soup.find(id='content')
content_div.append(new_element)
# Print the modified HTML document
print(soup.prettify())
>питон
>там нормальная асинхронность а не говёный евент луп
Кекнул в шепот. Ладно бы ты про говно спизданул, но в питоне такой же эвент залуп, который ещё и заблочить легко, если где-то синхронную функцию вызываешь внутри него, а не в отдельном треде.
мимо недосинька на петухоне
Теперь добавь на клиенте.
Да а че там обсуждать?
Бекендеры - дегенераты, которые в двух строчках 10 ошибок делают.
Смеяться над бекендером - это как смеяться над дауном. Он не выбирал таким родиться.
Сам бэк на жабаскрипте не подсунешь и не будет никакого бэка.
Первая ссылка на stackoverlow - https://stackoverflow.com/questions/57036317/react-native-java-lang-unsatisfiedlinkerror-couldnt-find-dso-to-load-libherm
Или там не то?
мимо писал под ведроид на флатере, брат жив
Питон на фронте? Норм шутка. Даже на бекенде он хуже js/ts.
Для ебанько тыща элементов это охуеть как много. Хотя для дауничей которым нужно тысячу библиотек подключить чтобы сложить два плюс два - вполне возможно так и есть.
Потому что иди нахуй.
Похоже на баг, ололо.
Ты дохуя эксперт в языке похоже, может тогда знаешь тогда какой еблан придумал "this" называть "контекстом"?
Всмысле, он правильно прочитал твои мысли? Это не майндфак задачка, ты правда такую говнину написал чтобы скоуп брался хуй знает откуда?
схуяндлить, я даже не понимаю, что это значит. Если можно сделать хттп фетч, что мешает мне отправить всю хуйню в бд?
В данном случае, когда вы вызываете функцию `f(1)`, значение `a` передается как аргумент функции. Внутри функции есть объявление переменной `a` с ключевым словом `var`. В JavaScript переменные, объявленные с использованием `var`, поднимаются (hoisted) в начало своей области видимости, но инициализируются значением `undefined`.
Таким образом, код функции фактически будет интерпретирован примерно следующим образом:
```javascript
function f(a, b) {
var a; // Поднятие переменной 'a'
b = () => console.log(a); // Инициализация b с функцией, которая ссылается на 'a'
a = 'AAAAAAAA'; // Переопределение 'a'
b(); // Вызов функции b
}
f(1);
```
Когда функция `b` выполняется внутри функции `f`, она ссылается на переменную `a`, которая в этот момент равна 1 (значение, переданное при вызове функции `f`). Поэтому при вызове `b()` выводится значение 1. Переопределение переменной `a` на строку 'AAAAAAAA' не влияет на замыкание, созданное функцией `b`.
Проецирующий джунишка, палишься на том что как всем джунятам-даунятам тебе лишь бы блестящих говноперделок засунуть побольше, даже там где они нахуй не нужны.
Что ты пытаешься сделать?
Что такое поднятие переменной "а"?
Отрендерить 1000 элементов без виртуализации обычно плохая затея. Джун будет писать виртуализацию руками, сеньор возьмёт либу весом в несколько КБ без каких-либо блестящих свистоперделок, потому что либа для виртуализации просто выполняет всего одну функцию, виртуализацию списков.
div = document.createElement("div")
document.body.appendChild(div)
Высокая культура разработки искаропки.
Ну у тебя на скрине база для джуна.
Все это проходят на 1-3 курсе вуза.
Это теория и ее точно недостаточно для seniora
НИХУЯ из этого не помогло, я блядь уже с ума схожу нахуй, что за хуйня НАХУЙ БЛЕАТЬ. Все зависимости подрублены нахуй, хермес отключал,включал, предрелиз сделал на экспо и там менял всю эту хуйню. НИ-ХУ-Я БЛЕАТЬ, это какой-то пиздец
Я эту вакансию месяца 2 уже наблюдаю, что-то мне, кажется, что цель этой хуиты точно не нанять.
Да никому ваш суп не нужен, чтобы раздавать готовый бандл. Вы там ебонулись? Нахуй ещё ваш сервер. НА КЛИЕНТЕ делай на питоне.
А сранье ссылками на новые объекты, которые мы создаем, чтобы в стейт записать, дешевая операция?
Мне кажется ты не в реакте новый, а в целом в твоей голове нет такой картинки, что глубое сравнение это дорогая операция. Да ещё на каждый элемент массива. Сравни за дешёво изменения в объекте, у которого может быть произвольная вложенность, например 10?
И да, копировать объект дешевле чем вставить в HTML DOM. Попутно ещё решив, нужно это обновление или нет. Знаешь ли, пересчитать лейаут страницы и перекрасить его - не дешёво, даже с учётом всех магических браузерных оптимизаций.
>>30569
Дал тебе на клыка, псевдо элитист. Чтоб тебя лексер ночью покусал.
А ты прав, если у нас есть объект с большой вложенностью, то придется спускаться вниз каждый раз, чтобы проверить, не изменился ли он.
А вот ссылка всегда одинакова по размеру, независимо от размера объекта.
Вот теперь кажется понял. Если поставить себя на место реакта, то все встает на свои места.
Что есть похожее на FastAPI питона?
Т.е. современный, непереусложнённый, с автоматической генерацией OpenAPI 3 доков, норм работающий с typescript.
Пока нашел LoopBack 4, норм? openapi вроде есть
Тем, что это джаваскрипт.
А если это питон, который выглядит как джаваскрипт, то просто пересаживаем питоновых макак на JS и экономим тысячи долларов на переобучении, дообучении, и имплементации поддержки петона в браузере.
А дальше высококультурные шизы пусть через преттиер себе отрезают скобочки, до которых могут дотянуться, и точки с запятой.
Ты просто тупой как пробка, как можно было не догадаться, увидев, первый раз стейт, что там внутри выполняется что-то вроде: emitOnStateChange() только тогда, когда ты сеттишь что-то новое в стейт, через хуки или в классовых компонентах и именно это тригерит ререндер, это называется dataBinding, это база, это знать надо. И именно поэтому тебе нужна set функция или поле в классе, потому что иначе некуда вставить этот самый emitOnStateChange().
Шутка на тебе. Я спрашивал, почему ререндер происходит при изменении ссылки внутри стейта, а не при изменении переменной по "старой" ссылке.
Ну вот потому я тебя и назвал, тупым как пробка. Ведь очень не сложно догадаться, что если ты меняешь что-то внутри массива, то тебе некому триггерить emitOnStateChange(), поэтому перерендера и не происходит.
Вопрос был, почему создатели Рякта так решили сделать.
А, ладно, я получил ответ на свой вопрос, пойду дальше читать.
Алсо, чтобы два раза не вставать, посоветуйте годные туторы по рякту в духе, по примеру этого:
https://react.dev/learn
Реакт не стартуер ререндер, если твой литерал/ссылка на объект не поменялась, но ты "попытался".
Дойдёшь до секции с оптимизацией ререндеров - навалят ещё инфы.
Я тебя понимаю.
>Есть вообще хоть что-то, в чем Реакт был бы лучше чем Вуе в 2023-м?
Не перестаю проигрывать с эмаунта копиума, необходимого Реакто-петухам для совладания с тем фактом, что им приходится 24/7 ебаться с мемоизацией, чтобы предотвратить избыточные ререндеры, в то время как в Вуе такой проблемы просто не существует.
Также орирую с того, что для элементарной передачи данных снизу вверх реакто-петухам приходится каждый раз создавать замыкание.
Уже этих двух вещей достаточно, чтобы понять, что реакт - это не фреймворк, это по сути продвинутый аналог jQuery для работы с примитивнейшими лэйаутами.
Ах да, как-то раз принес это на реддит, так у реактопетухов началась аццкая массовая тряска с воплями "ЗАТО У НАС ПОВЕРХНОСТЬ АПИ МЕНЬШЕ!!!111ЁЁЁ". Дауны, что с них взять.
Ахаха, ну натуральный джун же! Мы вам перезвоним.
Лексическая область видимости, прикинь. Для функции она создается в момент определения, а не вызова. "b", инициализируясь в области видимости аргументов, именно в ней будет разрешать внешние для себя переменные. Поскольку в момент передачи там была "1" именно она и становится "a" для "b". Соответственно, если вызвать "f()" без параметров, получишь undefined.
Начнем обоссывание.
1. Мемоизация в реакте изевая и необходимость в ней возникает крайне редко, если ты ебешься 24/7 с чем-то таким, то лучше уебывай из профессии, ну или на вью переходи хз.
2. Нахуя данные передавать снизу вверх, данные есть смысл передавать сверху вниз. А снизу вверх - файрить эвенты. Ну или поясни, что имелось в виду.
3. Реакт и не позиционируется, как фреймворк, это либа. Набор утилит для преобразования DOMa, тебе решать, что с этим набором делать. Если не тянешь, вью возможно отличный выбор, где криворуким максимально ограничили их способность делать говно.
4. Да, на реддите сидят дауны, не удивлен, что ты там сидишь.
Не знаю, похож ли на фастапи, но в несте есть автогенерация опенапи и тс по умолчанию
Тебя уже попустил другой анон по всем пунктам, но я ещё добавлю по первому. Скорее всего в следующей версии выйдет новый компилятор, который будет делать автоматическую мемоизацию.
Ты мне это нахуя пишешь, безчувстенный? У меня нет вопросов касательно того, как работает тот код.
Еще бывает динамическая. Была раньше в некоторых лиспах, но больше нигде не используется. Это плюс-минус как ведет себя this (которое по неведомому недоразумению называют "контекстом" в рашкованском сегменте интернета) в js. А теперь представь что так себя ведут все переменные и как с этого будут жопы гореть - поэтому от этого давно отказались.
Его объяснение кстати хуита само собой. Вот правильное объяснение >>30439
Ух бля, тесты за анона написали, получается.
Ну это медиум задача, значит миддл.
Вроде это пишется где то примерно за минуту. Но главное не забывай
pub/sub - это не архитектура - это ее отсутствие.
uWebsocket.js
>pub/sub - это не архитектура - это ее отсутствие
Чел, сейчас все приложения на микросервисах так устроены, только pub/sub с маршрутизацией и гарантией доставки.
На бекенде,таким образом DDD подход в микросервисном исполнении реализуется.
Т.к у тебя три альтернативы фактически при использовании микросервисов
1) Общаяя бд, в миросервисном исполнении проблемное решение
2) Распределенные транзакции, костыль
3) Ивент драйвен архитектура
>Идея всем дружно срать в один чан - не архитектура
В какой один чан? Меседж брокер (рабит, кафка) только распределением и доставкой ивентов занимается, в нем нет бизнес логики. Идея в том что
1) каждый микросервис обрабатыает свой поток событий и отдает в брокер другой поток событий
2) что не нужно заботится о согласовании данных между бд разных микросервисов
3) асинхронность обрбработки событий
похуй
>1) каждый микросервис обрабатыает свой поток событий и отдает в брокер другой поток событий
Это и есть
>всем дружно срать в один чан
>2) что не нужно заботится о согласовании данных между бд разных микросервисов
Перевод: никто не знает как устроена система и даже в принципе разобраться в ней невозможно.
> setList([...list])
Хотя это даже не работает ведь лист я получил через useSWR и у него никакого setState нету уже.
Тогда я накостылил вот такой проп диву data-redraw={redraw} и в redraw просто случайное число отправляю. Смекал-очка.
А куда денешься, лол. Это будущее с горизонтальным масштабированием, с инфраструктурой как код, с чат гпт, и все это будет в облаке у провайдера бизнес решений. А программисты превратятся в интеграторов и консультантов.
Там не один чан, там много разных топиков
>useSWR и у него никакого setState нету
Доку открывать пробовал? https://swr.vercel.app/docs/mutation#bound-mutate
>Предметно-ориентированное проектирование (реже проблемно-ориентированное, англ. domain-driven design, DDD) — набор принципов и схем, направленных на создание оптимальных систем объектов. Сводится к созданию программных абстракций, которые называются моделями предметных областей. В эти модели входит бизнес-логика, устанавливающая связь между реальными условиями области применения продукта и кодом.
Чистейший поток базза.
Наличие шины данных/брокера сообщений не является обязательным атрибутом для реализации ддд в микросервисах. И микросервисы можно реализовать и без ддд и без кафок-хуяфок, и каждый микросервис может иметь свой субдомен, а всех их объединять кордомен, который может быть чем угодно, хоть отдельном сервисом, типа воркфлоу, хоть просто набором зашаренных классов/адаптеров, обёрнутых в отдельный пакет или библу.
>Вроде это пишется где то примерно за минуту.
Если зайти в решения и скопировать первое попавшееся, да. А 2 часа для малютки, который в первый раз с такой задачей столкнулся в самый раз.
Когда в универе учился, нужно было перед преподом на листочек написать евент эмиттер если конечно попадётся тот билет. Как раз надо было уложиться за минуту две
Какой это универ? Буду всем советовать.
Этот кал я уже выучил
Братишка, тэйк ит изи, нервы дороже всей этой фигни. Ну и тут нужен мобильщик, местные видимо только web пишут.
Понял.
>mutate({ ...data, name: newName })
...data а вот это хорошо потому что мутировать это плохо понятненько? А если там миллион элементов в массиве, мне тоже всегда надо его копировать? А мутировать плохо потому что долбоеб который придумал реакт так скозал и всё.
Вообще-то такой костыль прям в доке написан. Только с другим именем.
https://react.dev/reference/react/useState#resetting-state-with-a-key
Ты излил какое-то говно. Потом откуда-то вылез SWR. Никто не знает размер твоего списка. Если у тебя там 10 элементов. Ты литералли экономишь на спичках усложняя и спагетизируя логику компонента. Мы тут угадать должны, что ты там с данными делаешь? Отсылаешь ли запросы?
Да в конце концов, у тебя девтулзы есть, можно посмотреть перформанс. Ты вообще в курсе про такой функционал? Он прямо в твоём браузере.
> пример
Бля чел, это какой-то пиздец разбросанный на несколько уровней. Родительский компонент делает ТРИКИ-ТРИКИ, чтобы сбросить стейт вложенной управляемой формы...
Это говнокод чистой воды. Я, конечно, могу представить, когда это могло бы быть полезно, относительно, но это только если ты изобретаешь ещё больше велосипедов.
Когда тебе может понадобиться явный ключ на компонентах - это например, если у тебя условный рендеринг компонентов, которые fiber не может различить ввиду того, что они рендерятся в один и тот же элемент. Вот тогда нужно ключом намекнуть, что неплохо было компонент полностью перерисовать.
Короче, смотри, вот есть ОП-пост:
>Если рассчитываешь получить дельный ответ, сформулируй правильно вопрос: «что я хочу получить, что я для этого делаю, что я вместо этого получаю». Если/когда самостоятельно найдёшь решение — поделись в треде, мы за тебя переживаем.
Ты пока что сюда пришёл как в бложик. Сам придумал проблему, сам решил, сам самоудовлетворился.
Меня бесит useState([...list]) так и надо делать потому что так Аллах велит или можно так не делать?
Типа ты не видишь в ...цикл на N элементов? И считаешь что в любом случае всегда надо бездумно это писать?
И это конечно же проблема конкретного моего случая, а не то что надо обсуждать в "бложике".
> пиши с примерами
> АРРРРРЯЯЯЯЯ НЕТ ВЫ ВРЁТИ, НЕ МОЖЕТ БЫТЬ, ЧТО Я ТАКОЙ ИСКЛЮЧИТЕЛЬНЫЙ
Ничего, порридж, дойдёшь до редакса, до иммера, всё будет.
>А если там миллион элементов в массиве
И что? Если у тебя такие вопросы возникают - иди смотри как работают JS движки, что бы лишних вопросов не было.
А вот так, что ты в 99.999% случаев копируешь 64битные числа, что происходит за микросекунды и не оказывает влияния на перформанс.
Какой же ты уебон. Как ты умудряешься со всех тейков уцепиться не за ссуть™ - просто фантастика.
Копируется РЕФЕРЕНС на объект, читай: ссылка на объект в памяти. Кишочки твоего объекта в массиве не копируются.
Научись сначала делать как все, потом вставляй свои костыли. Или выбери что-то помимо реакта уже сейчас.
Это ты вместо того чтобы сказать суть посылаешь почитать хуй знает че и серишь базвордами про биты. Какая мне нахуй разница какие там биты, чмо тупорылое.
...list - 1 цикл перебора массива. 1 цикл больше чем 0 циклов. 1 цикл менее требователен к ресурсам чем 0 циклов.
Дочитай. Чтобы ты потом не удивлялся почему твой костыль не работает. А тимлид ебёт шваброй в жопу.
GL HF
клеймо жулика, с таким сразу нохаир
нет.
ЛЮДЕЙ С ДОСТУПОМ К РУПОРУ - НЕ БЕРУТ НА РАБОТУ В 2023
блогеры, люди с твитера - все они подпадают под нохаир
Это копия, сохраненная 14 февраля в 19:16.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.