Вы видите копию треда, сохраненную 26 августа 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
НЕ КОПИРУЙ КОД ПРЯМО В ТРЕД!
Для программирования на ХТМЛ https://codepen.io/pen/
Для программирования на алёртах https://jsfiddle.net/
Для фреймворков библиотек https://codesandbox.io/
Для живой странички из коробки https://repl.it/languages/web_project
Для Ноды с пакетами и консолькой https://repl.it/languages/nodejs
В этом треде собираются величайшие умы человечества – мастера валидации форм и специалисты по JSON-технологиям. Этот тред посвящён главному языку будущего – JavaScript. Благодаря своей гибкости используется в браузере, на серверах, в мобильных приложениях, на десктопе и практически во всех видах программирования. Удобный синтаксис позволяет легко писать на нём, а высокая производительность делает его отличным выбором для решения любых задач – от небольших магазинов до огромных highload проектов. JavaScript по праву является самым популярным в мире языком. На каждом сайте есть браузерный JavaScript, а JavaScript на сервере используется такими крупными корпорациями, как Amazon, Yahoo, HP, NASA, Walmart и многие другие.
Часто задаваемые вопросы: https://github.com/vladimir37/js-thread/blob/master/Wiki/faq.md
Список материалов для изучения: https://github.com/vladimir37/js-thread/blob/master/Wiki/learn.md
Список инструментов и направления JS-разработки: https://github.com/vladimir37/js-thread/blob/master/Wiki/tools.md
Конфа /pr/ в Slack: https://slack-2chpr.herokuapp.com/
npx live-server .
(точка в конце)
и получить сервер этой директории с живой перезагрузкой на изменениях.
https://www.npmjs.com/package/live-server
Всем здорово! Подскажите как вкатиться айти?
Мне тут кое-кто посоветовал начать с Кантора, это нормальная тема?
пикрандом
привет
Если с английским плохо, то начни с /fl
Начинаешь с
https://htmlacademy.ru/
Бесплатного хватит. Но если есть копейки, купи подписку на месяц, мотивирует.
Вместе с тем по вечерам внимательно смотришь
https://www.youtube.com/watch?v=Sy_wba7l1UU&list=PLawfWYMUziZqyUL5QDLVbe3j5BKWj42E5
После того, как закончишь академию
https://ru.hexlet.io/courses/introduction_to_programming
https://ru.hexlet.io/courses/intro_to_web_development
Теперь у тебя будет представление о программировании вообще и о вебе в частности. Тогда уже можно и Кантора навернуть или съебать в другом направлении.
>Реакт - это библиотека. Для рендеринга html. И больше в нем нет нихуя.
>Алсо, умиляет подход к передаче данных в компоненты. Сначала много разговоров про иммутабельность, пропсы, one-way, чистые функции, и прочее. Охуенно.
>А практически - что с этим всем делать? А-а-а, практически... Ну, практически - надо юзать редукс, который всё красиво сделает с чёрного хода, через недокументированные возможности.
Ну почему этот долбаный реакт взлетел, раз он особо нихуя не может?
React хорошо подходит для разработки большх проектов в больших профессиональных командах.
Оттуда и появился, собственно.
Для маленькой команды с ограниченными ресурсами и для поделок на коленке - слишком низкоуровневый и затратный.
А вот Vue удачно вписывается в обе эти модели разработки.
вот и я о том)))
Что тут может не работать?
пик 1: относительный publicPath ( для gh-pages )
пик 2: лодеры
пик 3: зачем то добавляет еще раз /assets/assets/ к путям до шрифтов
пик 4: стили и js нормально подгружает используя относительный publicPath
Начни с Flow.
Поделитесь ссылкой на торренты с интенсивом по свежему Angular от javascript.ru
Палит две А подряд
/a{2}/.test('aba'); //false
Как палить не подряд?
http://bootstrap-4.ru/docs/4.1/components/forms/#custom-styles
Что это блять? Как этим пользоваться? Если я у меня какое-то приложение и валидация в нём это одна из функций, которай должна осуществляться, по нажатию на какой-то бтн. Как мне эту ебалу переписать и нормально пользоваться?
>по нажатию на какой-то бтн
Тогда вся эта ёбала вообще не нужна - вызывай просто form.checkValidity().
https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation
(русский перевод там тоже есть, но неполный).
Что делает код на пике:
0. Запускается после полной загрузки страницы.
1. Находит все формы, имеющие класс 'требует-проверки' (видимо, ставится где-то в др. месте).
2. Добавляет каждой event-listener на событие submit (отправка):
......1. Проверяет, валидна ли форма.
......2. Если нет - останавливает отправку.
......3. В любом случае - добавляет класс 'было-проверено' (видимо, используется где-то ещё).
Учи джаваскрипт.
Не стесняйся заходить в гугол и искать там по кускам кода.
>Тогда вся эта ёбала вообще не нужна
Но, если ты хочешь именно bootstrap-валидацию, и, тебя, почему-то, не устраивает валидация по submit (почему?), то тебе надо сделать так, как внутри обработчика на пике - добавлять класс 'was-validated' после вызова form.checkValidity().
Алсо, я тоже не делаю валидацию по submit - вызываю по кнопке, а потом делаю submit из js.
Но, я и встроенную html-валидацию не использую, и вообще большой затейник.
Класс was-validated добавляется только в случае чекВалидати === true, а вовсе не "в любом случае"!
Пилил сайт на компе, перенёс всё на ноут и у меня ОТВАЛИЛАСЬ АВТОРИЗАЦИЯ, точнее, не работает ajax. На компе стоит ТОЧНО ТАКОЙ ЖЕ локальный сервак, файлы все ТОЧНО ТАКИЕ ЖЕ, я НИ СТРОЧКИ не поменял, но на компе всё работает, а тут нет, меня трясёт, блять, сука. Что здесь не так? НУ ЧТО?
$.ajax({
type: "POST",
url: "include/auth.php",
data: "login="+auth_login+"&pass="+auth_pass+"&rememberme="+auth_rememberme,
dataType: "html",
cache: false,
success: function(data) {
if (data == 'yes_auth')
{
location.reload();
}else
{
$("#message-auth").slideDown(400);
$(".auth-loading").hide();
$("#button-auth").show();
}
}
});
Ну всё же работает на компе, СУКАААААААА, я целый день с этим дерьмом вожусь.
да что угодно может пойти пиздой, ты вкладку network в devtools покажи после того как кликнешь на кнопку чтоб сделать запрос, и в консоли что высвечивается тоже доставь.
АААААААААААААААААААА
Всё, нахуй. Сюда написал и сразу всё решилось. Оказалось, что ебучая пыха сессию не стартовала. Но это не оменяет того факта, что НА КОМПЕ-ТО ВСЁ РАБОТАЛО. ЕБИСЬ ВСЁ КОНЁМ, ВЕРСИЯ ПЫХИ ОДНА И ТА ЖЕ, СУКА, НУ ЧТО ЭТО ТАКОЕ?!
Если хочешь пользоваться - WebPack + Babel.
Некоторые большие библиотеки, типа реакта, vue, jquery, lodash etc - можно отмечать как external в вебпаке, и инклудить в браузере отдельно. Это работает, если библиотека предоставляет глобальный объект - React, Vue, $, _ etc.
Раскочегаривать всю эту механику ради одних импортов - бессмысленно. Но, есть ещё лямбды, классы, jsx, промисы, async, class properties и хуева туча js-фишек, которые появятся только в будущих стандартах языка.
Плюс - структурирование кода.
Без ноды - легко.
Не использовать импорты вообще, и писать просто так, на глобальных объектах. Т.е. просто используешь глобальную переменную Vue, и всё. Естественно, включив загрузку соотв. скрипта в html.
Я знаю, как билдить ассеты, и весь es6 синтаксис, кроме импортов, доступен в текущей версии ноды. Проблема вообще в другом. Я хочу писать на ноде, тестить на ноде, и при этом не ебать себе мозги, подключая babel или --experimental-modules на любое телодвижение только из-за сраных несовместимых импортов, которые хуй знает зачем и кому сейчас нужны, раз они в ноде не поддерживаются из коробки. Собрать весь проект в ассет и отдать его браузеру - это задача на пять минут, я про нее не говорю.
>Не использовать импорты вообще, и писать просто так, на глобальных объектах.
Вопрос не в том "как писать", вопрос "нахуя так писать". Без быстрых тестов, без нормальной системы модулей, без нормально прописанных зависимостей и с постоянным засиранием глобалов. Я с этой хуйни и перешел на ноду для фронтенд-проектов в первую очередь.
ES6 не поддерживается всеми браузерами.
Те, что поддерживают - поддерживают не полностью и с багами.
Нахуй он нужен вообще, если не поддерживается из коробки в стабильных версиях браузеров?
(это я пользуюсь твоей логикой, если что)
>ВЕРСИЯ ПЫХИ ОДНА И ТА ЖЕ
А версии ОС, апача, модулей к нему - разные. А потом выясниться, что бд забыл поставить.
В браузерный код ты в любом случае переводишь все через компилятор. И есть разница между сахарком классов и перехуячиванием всей устоявшейся системы импортов. Например, с импортами я не смогу использовать NODE_PATH в своем проекте и мне придется ебаться еще больше, чтобы оставить require("shared/utils"), который удобно указывает на lib/shared/utils.js, а не переделывать его в ебучий релативный импорт.
>перехуячиванием всей устоявшейся системы импортов
С этого и надо было начинать.
У меня такой проблемы нет (т.к. или вообще без ноды, или бабель везде), посоветовать ничего не могу.
Кроме как погуглить - думаю ты не один такой расстроенный, возможно люди что-то придумали уже.
Ну, и, добро пожаловать в волшебный мир веб-фронтэнда, лол.
ОС - да, другая, но всё остальное такое же, базу экспортировал.
Так вопрос, каким образом люди тестируют в сетапе babel/webpack без ноды? Не в браузере же и не вручную, это долбоебизм. Или волшебный мир фронтенда до сих пор не научился в адекватное автоматическое тестирование?
>babel/webpack без ноды
Это невозможно, и ты должен это понимать.
И чем тебе бабель не угодил?
Типа, вся остальная хуерга тебе норм, а бабель - это уже перебор, лол?
Вообще, такое ощущение, что ты чего-то недопонял, и ломишься в открытую дверь.
ну ладно, после получаса исследований максимум что мне предложили это то, что на пике ( типа опциональными поставь, но хули ж толку тогда вообще с ТС-а? ) Я в ахуе
пиздец, я половину базовых классов на ТС уже написал
https://github.com/facebook/flow/issues/5869
лел блядь сходу
тут предлагается такой обходной путь
Component<*>
Ты как-то выборочно там прочитал, лол.
https://flow.org/en/docs/react/components/
Алсо, не надо обходных путей.
Надо примерно как в TS:
Component<{propKeyA: string, propKeyB: number}, {stateKeyA: string}>
После нормальных языков это чувствуется как пиздец, когда мне нужно ставить отдельный сторонний компилятор и везде его использовать, чтобы мой нативный код просто выполнялся, причем не в каком-то ебанутом окружении браузера, где нужно поддерживать десять версий IE, и это оправдано, а в моем основном рабочем окружении(!!!). Еще сверху нахуячить пресеты для браузера, пресеты для окружения ноды, пресеты для пресетов, плагин бабела для тест-фреймворка, и это абсолютный минимум. Сейчас поигрался с бабелем в ноде и ну его нахуй, лучше возьму либу, которая поддерживает CommonJS модули.
Ниче, со временем у тебя вырабатается стокгольмский синдром.
Нужно знать html и css, чтобы начать учить JavaScript?
Да, на все это у тебя уйдёт неделя или две, ничего сложного там нет, а потом будешь ебаться с жс, как я сейчас
Ууу сука зла не хватает, бросаю, и на следующий же день возвращаюсь, ничего с собой поделать не могу, надеюсь, через месяца два изучения, я все таки накатаю свою йобу.
Вот я последним коммитом (а возможно двумя) испортил свой локальный репозиторий и хочу полностью заменить его веткой из гитхаба.
Но моя локальная считается master и не дает это сделать .
Как принудительно заменить её?
Анон, недавно пришлось на работе писать на js и так уж вышло, что кроме меня тут на нём никто не пишет, кода на js у нас нет, поэтому стал вопрос о закладывании какого-то фундамента из стайлгайдов, а потом и обмазывания всевозможными линтерами.
Какие требования к стилю написания js-кода используются в твоей компании, есть какие-то общие, вроде pep-8 в питоне? Поделись, если можно, ссылками.
Пытался гуглить, но зашился в десятках статей, каждая из которых предлагает свой подход.
git reset --hard origin/master
так ты ж программист => ты яйцеголовый
150-200 тыс руб для быдлокодерка на шарпе
https://javascript.info/mouse-drag-and-drop
>D&P
ПНХ
>внутренние события
Так это не делается. Попробуй через глобальный флаг.
let hold = false;
onmousedown => hold = true;
onmousemove => if (hold) do shit;
onmouseup => hold = false;
Ты прав, дело не из лёгких. Стоит понимать, что ЖС это лингва-франка и у нас тут нет никакого доброго диктатора.
Короче, если хочешь прям из коробки, но хуёвенько, то просто поставь в Вскод
https://marketplace.visualstudio.com/items?itemName=numso.prettier-standard-vscode
Но тыжеинженер.
Инструмент для линтинга это однозначно Eslint:
https://eslint.org/
Он очень гибкий требует попердолиться.
Есть васянская попытка навязать для него стандартные настройки:
https://standardjs.com/
Но они предлагают не использовать точку с запятой, что противоречит спеке языка, поэтому сразу идут на хуй.
Есть годный обоснованный стайлгайд от Аирбнб:
https://github.com/airbnb/javascript
Если запустишь в проекте
npx eslint init
Он среди прочего предложит тебе этот конфиг. Это будет хороший выбор для начала.
Дальше можно добавить плагинов для конкретных библиотек. Например, если ты используешь Джест для тестов, то найдёшь
https://github.com/jest-community/eslint-plugin-jest
Помимо линтинга ещё нужно форматирование. Это Притиер:
https://prettier.io/
Нужно будет подружить его с Еслинтом:
https://prettier.io/docs/en/eslint.html
Остаётся только подцепить это на прекоммит-хук, чтоб дерьмо не протекло:
https://github.com/typicode/husky
и наслаждаться.
Если будешь использовать create-react-app, то почти всё это будет сделано за тебя. Читай их ридми.
Ну и для Вскод поставить шикарные плагины под это дело:
https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint
https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode
подсветки, подсказки, автоматизация, все кайфы.
Ты прав, дело не из лёгких. Стоит понимать, что ЖС это лингва-франка и у нас тут нет никакого доброго диктатора.
Короче, если хочешь прям из коробки, но хуёвенько, то просто поставь в Вскод
https://marketplace.visualstudio.com/items?itemName=numso.prettier-standard-vscode
Но тыжеинженер.
Инструмент для линтинга это однозначно Eslint:
https://eslint.org/
Он очень гибкий требует попердолиться.
Есть васянская попытка навязать для него стандартные настройки:
https://standardjs.com/
Но они предлагают не использовать точку с запятой, что противоречит спеке языка, поэтому сразу идут на хуй.
Есть годный обоснованный стайлгайд от Аирбнб:
https://github.com/airbnb/javascript
Если запустишь в проекте
npx eslint init
Он среди прочего предложит тебе этот конфиг. Это будет хороший выбор для начала.
Дальше можно добавить плагинов для конкретных библиотек. Например, если ты используешь Джест для тестов, то найдёшь
https://github.com/jest-community/eslint-plugin-jest
Помимо линтинга ещё нужно форматирование. Это Притиер:
https://prettier.io/
Нужно будет подружить его с Еслинтом:
https://prettier.io/docs/en/eslint.html
Остаётся только подцепить это на прекоммит-хук, чтоб дерьмо не протекло:
https://github.com/typicode/husky
и наслаждаться.
Если будешь использовать create-react-app, то почти всё это будет сделано за тебя. Читай их ридми.
Ну и для Вскод поставить шикарные плагины под это дело:
https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint
https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode
подсветки, подсказки, автоматизация, все кайфы.
просто ТС говно без задачв боьшинстве случаев
Откроем твой первый пик:
>document.getElementById('root') as HTMLElement
>as HTMLElement
Сильно помогло? Без него бы руки отвалились, наверное, да?
Лучше заложи фундамент из нормальной архитектуры, тестовой дисциплины и настроенного окружения. Всегда охуевал с людей, которые на полном серьезе дрочат на стайл гайды. Стайл гайд - это чтобы ньюфаги не писали совсем уж срань и для каких-то специфичных особенностей языка, но если у тебя есть любой опыт разработки, то ты и так знаешь 90% того, что тебе предложит стайлгайд, потому что это просто common sense.
Особенно этим любят заниматься фронтенд-макаки почему-то. У него 0% тестового покрытия, нечитаемая реакт-залупа на 200 строк кода в файле, где логика идет вперемешку с шаблоном, а он на стайл-гайды дрочит. Один мне на полном серьезе затирал, что вот в прошлой компании у него писали как попало, а в текущей используют стайлгайд и ему сразу заебись стало. Это каких макак набирать надо и как не уметь их загонять в рамки, чтобы стиль кода на что-то влиял? Не говоря уж про то, что любая IDE с плагином тебе и так покажет основную хуйню.
var a = true;
if(a){ window.location = 'nahui eto suda';}
Я пробовал в tampermonkey прописать что то типа const a = false;, но это не сработало. Можно как то избавиться от этого редиректа при этом не блокируя полностью выполнение яваскрипта?
спасибо, сейчас попробую
>>08759
В обоих случаях значение a перезаписывается и срабатывает условие: https://jsfiddle.net/qLtxsc6n/
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters
Может проблема не в Канторе?
К тому моменту, когда (если вообще) тебе они понадобятся, ты уже забудешь их синтаксис. Так что пока тебе просто достаточно запомнить, что они есть.
ну я только месяц как учу джс и мой ментор говорит мне , что сейчас мне мой код, в моем мини приложении надо переписать с ипользованием сеттеров и геттеров и почитать про протатипное наследие. Сижу с лицом грустной жабки и вообще слабо одупляю зачем на данном этапе моего вката вот это вот всё сейчас.Я бы еще бы каких-нибудь форм бы поклепал простых.
GraphQL типы,
TS интерфейсы,
Sequelize модели
Выглядит как полное говно, есть ли норм решение чтобы был один trust source?
>зачем на данном этапе моего вката вот это вот всё сейчас
Затем, чтобы сделать трёхслойное приложение, где были бы Model, Controller и View. Как раз функции-геттеры нужны в т.н. «модели». А уже поверх неё — можно и форм поклепать простых.
Чтоб твоему ментору поднасрать, скину тебе шизика светоча:
https://www.youtube.com/watch?v=lfdAwl3-X_c
И как надлежит его юзать.
Это какая-то лютая костыльная неюзабельная хуйня.
Что-то как-то они перемудрили с чистотой.
Напоминает стерильно-чистую бессмысленную собянинскую Москву, лол.
Вообще, реакт как-то разочаровывает по мере углубления в него.
И как-то снова начинает нравться Vue, лол.
Используй один маппинг для объекта, а в остальное время работай с данными? То есть пришел тебе запрос с JSON-объектом, ты пропустил его через маппинг, который конвертирует все поля в нужные типы, а потом работаешь с уже конвертированным объектом, убираешь неразрешенные поля, валидируешь и т.д. Конкретно с этим стеком не работал, но обычно используют ДБ схемы для этого, там уже все типы проставлены.
2 месяца работал в офисе, но работать с 8 до 8 (с учетом пути) 5 дней в неделю меня доебало, не моё это
думаю попробовать вкатиться во фриланс, но проблема в том, что вся работа в офисе была построена на гугловском полимере и обычно он нахуй никому не нужен, поэтому я не уверен во что лучше тыкаться
фулл стеки актуальны и cms. Забугор - WP, в Роиси битрикс
доброго времени)
я хочу сделать мультируменый чат с использованием socket.io, что бы комнаты юзеры могли создавать сами на лету
и думаю что лучше подойдет в socket.io для этого
namespace или room
но не понимаю их различий .___.
подтолкните, пожалуйста, в нужную сторону
Так лол, это graphql делает, там стрикт тайпы. Мне просто пиздец как не хочется описывать эти же тайпы ещё и в тайпскрипте и в схеме для постгреса.
Хочу писать на тайпскрипте с автоподсветочкой и всеми плюшками. Для этого нужно тайпить. Ладно, нашел такую штуку, попробую ее
https://github.com/19majkel94/type-graphql
>>09667
ебанутый?
>ебанутый?
Сынок, ты, видимо, туповат.
Поясню - типы у тебя описаны в одном месте, например, в TS.
Для всей остальной хуйни можно описания типов генерировать по описаниям TS.
Или TS типы генерировать ещё откуда-то.
Я, например, генерирую их из Java классов, как и SQL схему.
План хорош, но чета мне не нравится. Но план хорош.
Ответа на твой вопрос нет. Ты не контролируешь среду выполнения (бровзер у клиента). Раньше они текли на ровном месте. Сейчас даже куски замыканий выбрасывать умеют.
Если будут неприемлемые тормоза в конкретном браузере, дампать память и смотреть.
Понял, спасибо!
В смысле?
Там же написано, что всё убирается, в том числе и в jQuery (если и добавлял хендлер и удалял элемент через jQuery).
При условии, что у тебя на эти элементы не осталось ссылок - в переменных, массивах и т.п.
Если ссылки есть - надо им присвоить null.
Используй class properties (babel plugin).
https://babeljs.io/docs/en/babel-plugin-transform-class-properties/
И пиши просто в теле класса:
handleChange = (e) => {...}
И state тоже в теле класса можно определять.
Т.е. конструктор получается просто не нужен.
В современных гайдах по реакту везде так пишут.
Включая авторов.
Можно.
Алсо - реакт и ангуляр - это очень разные вещи.
Более разные, чем хуй и пизда, например.
Посоны, я принёс вам таскабельный PGP: https://username1565.github.io/pgp/
Поддерживается:
- генерация ключей RSA, ECC
- цифровая подпись
- проверка подписи
- шифрование (с подписью или без)
- дешифрование (с проверкой подписи или без)
- шифрование файлов, в том числе и бинарных
- закачка файлов, в том числе и бинарных.
Исходник тут, можно скачать в ZIP-архиве: https://github.com/username1565/pgp
Может ещё чё-то исправить или допилить, а?
Но ты же просто форкнул уже готовый проект и подправил стили с UI, что там еще делать?
>форкнул чужой проект
>поменял название с PGP Key Generator на PGP Suite
>Посоны, я принёс вам таскабельный PGP
У нас тут Денис Попов выкатил свежий релиз Болженос 2.0
Не нравится что-то — ну так не пользуйся и иди нахуй, пидораха. Или обязательно кукарекнуть надо, долбаёб?
Я пхнул туда верификацию отдельной вкладкой, и в декрипт, сунул её тоже.
Base64 для файлов добавил и функции к закачке файлов.
Что делать? Думал вы подскажете, после всяких тестов.
Может, какой-нибудь Jasmine-тест прикрутить можно было бы ещё.
Но есть несколько намеченных направлений для фиксов...
1. Я не могу зашифровать сообщение на сайте https://smartninja-pgp.appspot.com
используя ключи, сгенерированные здесь.
А вот ключи сгенерированные там - шифруют нормально.
Это указывает на несовместимость генераторов, но я нифига не пойму при компарации kbpgp.
Тот человек пишет, что эта версия - SSH-адаптирована.
Возможно поэтому генераторы несовместимы, но у SSH - другие ключи. Пикрил.
Возможно было бы выдавать и их.
2. Когда сообщение зашифровано (публичным ключём RSA),
да ещё и с подписью (другим приватным ECC), в зависимости от очерёдности,
должно бы быть возможным либо дешифрование без проверки подписи,
либо проверка подписи и возврат шифрованного сообщения с фингерпринтом.
Ни первое, ни второе - не работает. Подозреваю подпись обоими ключами.
3. Я видел ещё, там, внутри, Diffie-Hellman'a - его можно было бы вынести - отдельной вкладкой.
Объясните пожалуйста суть CORS. Вот допустим, запрещены в большинстве браузеров кроссдоменные XMLHttpRequest-ты.
Чтобы его выполнить, такой запрос должен удовлетворять двум требованиям:
1. Быть простым (т.е. POST/GET + 4 заголовка)
2. Ответ сервера должен в заголовках содержать Access-Control-Allow-Origin заголовок, который как бы намекает о том, что сайт работает с междоменными запросами и всё ок.
Если первое требование не выполняется, то, я так понял, запрос не совершается вовсе, что можно обойти с использованием предзапросов.
А если второе, то запрос совершается, но при отсутствии необходимого заголовка ответа браузер не вызывает событие load.
Но прикол в том, что запрос всё равно совершается! То есть, если по данному урлу есть какая-то логека, то она отрабатывает в любом случае, просто клиент получит ошибку.
В чём суть этой йоба-защиты, если она ничего не меняет и не предотвращает сами запросы?
> В чём суть этой йоба-защиты, если она ничего не меняет и не предотвращает сами запросы?
Хацкер не получит данные.
А, я понял. Защищают ведь не самого хацкера лол, а клиента, который посетит хацкеркий сайт.
Ибо данные, которые были получены от такого запроса до клиента так и не дойдут (браузер их парежит), поэтому они далее никоим образом обработаны быть не смогут.
Я видимо изначально неправильно понял. Благодарю.
Имеешь переменную, которую инкрементишь раз в секунду. И все.
Дальше остатки от деления и деление без остатка.
>инкрементишь раз в секунду
>js
Разве что это на ноде делать, а затем - по вебсокету гнать.
Нет, правильнее таймстамп переводить с свой кастомный формат, и таки да, обновлять отображение раз в секунду.
Вот отсюда первый абзац https://www.regular-expressions.info/captureall.html:
When creating a regular expression that needs a capturing group to grab part of the text matched, a common mistake is to repeat the capturing group instead of capturing a repeated group. The difference is that the repeated capturing group will capture only the last iteration, while a group capturing another group that's repeated will capture all iterations. An example will make this clear.
Let's say you want to match a tag like !abc! or !123!. Only these two are possible, and you want to capture the abc or 123 to figure out which tag you got. That's easy enough: !(abc|123)! will do the trick.
Now let's say that the tag can contain multiple sequences of abc and 123, like !abc123! or !123abcabc!. The quick and easy solution is !(abc|123)+!. This regular expression will indeed match these tags. However, it no longer meets our requirement to capture the tag's label into the capturing group. When this regex matches !abc123!, the capturing group stores only 123. When it matches !123abcabc!, it only stores abc.
This is easy to understand if we look at how the regex engine applies !(abc|123)+! to !abc123!.
Открываю общий гайд, говорят, что + это 1 или больше повторений https://learn.javascript.ru/regexp-quantifiers:
+
Означает «один или более», то же что {1,}.
Например, \d+ находит числа – последовательности из 1 или более цифр:
var str = "+7(903)-123-45-67";
alert( str.match(/\d+/g) ); // 7,903,123,45,67
СООТВЕТСТВЕННО!
В примере выше 'abc123blablabla' не будет матча !(abc|123)! Но если добавить плюс, то матч будет. Но почему?! Ведь когда гайд делает !(abc|123)+! - по этой логике должна матчиться ИЛИ группа абц, повторенная 1 и более раз, ИЛИ группа 123, повторенная 1 и более раз. Ни повторений группы абц, ни повторений группы 123 здесь нет, и нет их объединения в одну группу.
Но по факту действительно матчится весь набор абц123 разом. КАК? Какого хуя! Ведь здесь нет ебаных повторений!
?
Вот отсюда первый абзац https://www.regular-expressions.info/captureall.html:
When creating a regular expression that needs a capturing group to grab part of the text matched, a common mistake is to repeat the capturing group instead of capturing a repeated group. The difference is that the repeated capturing group will capture only the last iteration, while a group capturing another group that's repeated will capture all iterations. An example will make this clear.
Let's say you want to match a tag like !abc! or !123!. Only these two are possible, and you want to capture the abc or 123 to figure out which tag you got. That's easy enough: !(abc|123)! will do the trick.
Now let's say that the tag can contain multiple sequences of abc and 123, like !abc123! or !123abcabc!. The quick and easy solution is !(abc|123)+!. This regular expression will indeed match these tags. However, it no longer meets our requirement to capture the tag's label into the capturing group. When this regex matches !abc123!, the capturing group stores only 123. When it matches !123abcabc!, it only stores abc.
This is easy to understand if we look at how the regex engine applies !(abc|123)+! to !abc123!.
Открываю общий гайд, говорят, что + это 1 или больше повторений https://learn.javascript.ru/regexp-quantifiers:
+
Означает «один или более», то же что {1,}.
Например, \d+ находит числа – последовательности из 1 или более цифр:
var str = "+7(903)-123-45-67";
alert( str.match(/\d+/g) ); // 7,903,123,45,67
СООТВЕТСТВЕННО!
В примере выше 'abc123blablabla' не будет матча !(abc|123)! Но если добавить плюс, то матч будет. Но почему?! Ведь когда гайд делает !(abc|123)+! - по этой логике должна матчиться ИЛИ группа абц, повторенная 1 и более раз, ИЛИ группа 123, повторенная 1 и более раз. Ни повторений группы абц, ни повторений группы 123 здесь нет, и нет их объединения в одну группу.
Но по факту действительно матчится весь набор абц123 разом. КАК? Какого хуя! Ведь здесь нет ебаных повторений!
?
>по этой логике должна матчиться ИЛИ группа абц, повторенная 1 и более раз, ИЛИ группа 123, повторенная 1 и более раз
Ну так оно и матчит группу, повторенную один и более раз. В строке 123abc123 группа (123|abc) повторяется три раза.
Та, ну, я просто вкинул, думал вы лучше запилите. Хэххэх...
Он путает матчинг и поиск, похоже.
цените че нашел
В ЖС только ремайндер, который иногда тоже называют модуло. Знак у результата будет как у делимого.
5 % 2 == 1
5 % -2 == 1
-5 % 2 == -1
Модуло есть в других языках. Там вроде знак от делителя.
У нас вебшторм, откуда без консоли большей частью манипуляций занимаются. На сколько понимаю, в вс коде тоже самое есть и ты говоришь об этом, типа меню, где выбираешь команды, и все за тебя делается.
То есть норма и без заучивания команд.
И еще вопрос. Что используете из ramda? Какие мастхев методы есть и на какие стоит обратить внимание? Можно и из лодаша называть. Кроме пайпов и карринга.
Вообще не представляю, как и нахуя работать с гитом через UI. Разве что изменения смотреть, а так в сто раз легче и быстрее написать команду. Что там учить-то? git add, git commit -m, git commit --amend, git checkout, git merge, git pull, git reset, git push, git status - все, что тебе понадобится в 90% случаев. Половина из них говорит сама за себя
так-то две кнопочки в иде быстрее жать, чем скрывать иде, открывать консоль, писать три подряд команды, скрывать консоль. + без юи ты не видишь нормально кто сколько закоммитил, когда разошлись ветки, кто насрал в мердже и тд
Интересно, как можно работать без открытого терминала? В динамическом языке, например, хуй настроишь нормальный test-runner в IDE, легче уж в терминале команду выполнить. И напечатать команду всегда быстрее, чем мышкой кликать по залупам, выбирать, что закоммитить, что заресетить, что выкинуть и т.д. UI нужно только чтобы визуализировать изменения.
Я не пойму, использовать циклы и if..else признак говнокодера? Какой бы курс не смотрел, все стараются избегать подобных конструкций
Не жава-программист и не программист вообще, но требуется запилить небольшой скрипт для браузера.
Поясните, плз, как реализована вот эта ебала на пике. Не кукла, а именно форма и кнопки, которые бы появлялись при загрузке определённой страницы стороннего сайта. Это всё через изменение CSS-стилей страницы добавляется или как-то иначе?
А подробнее немного? Или дай ссыль на какой-нибудь страницу какого-нибудь learn.javascript.ru , где я мог бы прочесть, как именно такую форму сделать.
Но если сайт не мой, а сторонний, то как правильно встроить хтмл? Форму-то я создам, разберусь с отправкой данных из неё.
if else не говнокод, на одних тернарниках не разрулишься
циклы не очень по двум причинам, во-первых это зависимость от "внешних" переменных, типа каунтеров для for, либо условия для while, отсюда вытекает еще несколько грустных особенностей. во-вторых сейчас набирает популярность функциональный подход, а циклы - императивщина как есть.
С чего ты взял? Если совсем простое выражение, то можно заменить if..else на тернарный оператор, циклы обычно обернуты в функции поудобнее, например map filter reduce у массивов, но это тот же самый цикл. Без for..in ты объект не переберешь.
https://www.youtube.com/watch?v=P3fqetErxjA
Признак говнокодера — пытаться выёбываться в коде.
https://jrsinclair.com/articles/2017/javascript-but-less-iffy/
if есть, чем заменить. Но стоит стремиться к тому, чтоб код был человечным, походил на простые предложения. В таком случае if подходит лучше всего.
Стоит избегать сложных условий. Если больше одного оператора или регулярка, то упаковать в функцию с понятным названием:
if (isValid(email))
Чаще всего можно избавиться от else. Тогда ветвление, перегружающее мозги, станет простой последовательностью:
if (cond1())
if (cond2())
Код должен читаться как предложение, без подрубания интерпретатора в голове. Если такое внезапно помогут сделать свич или тернарник — настало их время.
Циклы чаше всего нужны при работе с коллекциями.
https://jrsinclair.com/articles/2017/javascript-without-loops/
Опять же, методы коллекций дадут код, более похожий на человеческие предложения:
отобразить пользователей как их айдишники
users.map(user => user.id)
Вспоминая прошлый абзац,
кто-то из пользователей админ
users.some(isAdmin)
Если коллекция большая, а задача нетривиальная, может потребоваться для эффективности таки использовать циклы, ветвление, байтоёбство. Ты уже догадался, нужно инкапсулировать всё это дело в функции с читаемым названием:
users.reduce(comlexData, store);
function complexData(store, user) {for { for { switch {} }}}
Оке, спасибо.
>Чаще всего можно избавиться от else. Тогда ветвление, перегружающее мозги, станет простой последовательностью:
>if (cond1())
>if (cond2())
Хуйня.
let cell = document.createElement("cell");
подойдет? Он создаст именно такой объект как на пике?
Прост
Ты создаешь пустой элемент, которого нет в стандарте, в структуре html. Тебе же необходимо генерировать класс.
На жс это будет выглядеть совершенно иначе.
мы вам перезвоним
keys берет только собственные свойства объекта, а for in лезет в прототип. Можно жидчайше сирануть в этом месте в определенных ситуациях.
То есть придется создать один элемент и его помножить?
Если я не ошибаюсь, достаточно просто написать ИИ, который будет сводить любую партию к ничьей. В закреплённом треде попробуй спросить алгоритм.
Хотя нет, погоди. Ты меня наёбываешь. Хочешь сказать, что с помощью JS нельзя изменить страницу какого-либо сайта, чтобы добавить какой-нибудь элемент? Я же не на стороне сервера это делаю, а на стороне своего компьютера.
Первую версию написал на nodejs, в хедеры добавлял примерно те же хедеры и куки что и отправляет мой браузер даже usercode_auth, но почему то небыло доступа к gg,h,e и прочем 18+ доскам. Я на это забил. Но почему то даже при дампинге с b треда у меня половина файлов бьётся. Код вот https://pastebin.com/6P700q00 .
Сделал синхронную загрузку файлов и со sleep между файлов. Но все равно блять, они бьются. че за хуйня ? Делал синхронную загрузку чтоб время было между реквестами. Ибо получается ебучий дудос (5 реквестов в сек лол) и вдруг Абу посчитает что это дуос и заблочит
Ну да, слава богу, что уже несколько лет можно не трогать руками кривейшие жс-прототипы, а использовать более-менее человеческий сахарок классов и забыть про эту хуйню как страшный сон.
где еще пишут на ооп? Класов не видел уже на фронте милиард лет, на беке вот первый раз буду typeORM чекать, декораторы там все дела
Интересно, как ты собрался писать без ООП на ОО-языке? Нет, я понимаю конечно, что и на джаве можно в 100% функциональном стиле писать, но нахуя стрелять себе в ногу?
Так как тогда добавить блок или редактировать, например, на том же mail.ru? Как правильно называется сие действие? Мне банально нужна форма с полем для ввода текста и кнопкой.
вот как раз захожу в класы, на тсе уже года полтора пишу чисто в функциональном стиле. НА БЭКЕНДЕ :3
Где я тебя прошу её реализовывать за себя? Ни в одном посте с самого начала это не было. Я попросил дать ссылку на урок или хотя бы ключи для поиска.
Бамп вопросу.
Я хз, что ты этим сказать хотел. Выше я уже писал, что ни разу не программист. Ты можешь нормально сказать, что гуглить, а не кичиться тем. что ты знаешь js, а кто-то нет?
Жмешь правой кнопкой на странице и выбираешь "Inspect Element", после чего редактируешь html-контент страницы как хочешь.
Бля. Я сделаю скрипт, вставлю его в хром, а именно в тэмперманки. Нахуя мне его руками каждый раз вставлять? Вопрос в том, какие теги/команды/функции/хуй знает, что ещё встраивают ту же хтмл разметку или ксс из этого скрипта на страницу, на которой он запускается.
Попробуй начать с прочтения документации.
Это актуально, если бы на страницу был заранее встроен скрипт или путь к нему прописан.
Если ты хочешь что-то вставить в дом, то тебе очевидно нужны методы работы с домом. Хоть как свой скрипт вставляй.
> Хоть как свой скрипт вставляй.
Так с этим вопросом я сюда и пришёл. Сколько ни гуглил так и не нашёл, как его вставить. Везде предлагается только <script></script>. Руками, естественно не подходит.
Берешь да перекатываешься. Язык даже попроще будет. Только готовься к функциональщине.
Вообще-то, именно в JS и перекатились все хипстеры-смузихлёбы рубисты.
Или ты думал откуда всё это в JS?
Я перекатился(потенциально) в охуенный эликсир, а на жсе сделал пару простых серверов и сейчас перехуячиваю фронт для старого рельсо проекта на реакт, чтобы не было так больно работать с тем легаси-говном, что там накопилось в ассетах. Ну и сам проект перевожу на эликсир потихоньку, потому что давно нужен полный рефактор, так что хули бы и не переписать на новый стек. Надеюсь к концу года будут заметные результаты.
рубист не-смузихлеб
>Котаны, а как перекатится в новомодный js после двух лет на ruby? С чего начать?
С понимания что нода - это однопоточный эвент-луп поверх восьмеры и libuv и весь твой код, который не из батареек, его нахуй блокирует. Потому что в батарейках, как правило, попердолились с асинхронностью за тебя.
Чтобы не блокировал - тебе нужно чтобы твой код регулярно совершал антипаттерн многопоточного программирования - то бишь ложился нахуй спать каждые n итераций - в результате чего получается что пердак будет гореть только у одного клиента, который будет полтора часа дожидаться отчета о доходах/расходах компании в разрезе временных отрезков, а не у всех остальных, из за того что бабаманя из бухгалтерии положила весь твой бэкенд нахуй.
Есть еще конечно,встроенный хластер, но он всего лишь запускает 8 отдельных экземпляров твоей аппликухи и обеспечивает свой маняраундробин-фейловер (с этой же задачей справляется гораздо лучше нужник и http на unix domain sockets), но его отличие от первого варианта в том, что таких бабмань-бухгалтерш понадобится для убивания апликухи не одна как в первом случае, а по количеству процессоров.
ES6 и ES2015 в этом плане принесли возможность использовать промисы и yield, что несколько облегчит твою жизнь, но необходимость превращать свой код в лапшу из setTimeout() по прежнему остается, как только твоя бизнес логика вырастет за пределы "склеить батарейки по Readme.md".
Большинство хипстоты ничего кроме
>склеить батарейки по Readme.md
и не делает, потому что верх сложности проекта для них - это интернет-магазин, где самая тяжелая бизнес-логика это запросы для бд, которые в тамошних батарейках асинхронные по-умолчанию.
А описанное тобой обычно на интырпрайзной жабе пишут.
Тот случай, когда ООП обусловлено сутью библиотеки (мапинг кусков хтмл в виджеты). Хуизнес-логика один хер - это асинхронные колбеки/асинк с промисами, с которыми ооп не дружит.
В оригинале реакт вообще был на Standard ML написан.
ООП интерфейс взяли при порте на JS чтобы народ не спугнуть, да для оптимизации под JS реалии
Охуеительное у вас представление об ООП уровня восторженного ньюфага "ФП хайпят, значит ФП это охуенно а ООП - говно". Объект - это набор методов с внутренним стейтом, только и всего. Если вы раньше хуячили наследование наследования наследования и называли это "ООП", то это не проблема ООП и вы так же будете хуярить говнокод в любом функциональном языке.
На жсе писать в тру-функциональном стиле нерационально и практически невозможно. Композиция функций, лямбы, монады и т.д - это не ФП. Это его элементы, которые прекрасно уживаются с объектами и классами. Точно так же, как наследование, полиморфизм и прочие элементы ООП прекрасно применяются в функциональных языках. Хорошая программа должно использовать и то, и то.
Мне-то ты что говоришь. Я прекрасно знаю об ML модулях, которые аналогичны ооп во многом, а так же о скале.
Вот есть какая-нибудь var string='abc123'.
В этой стр, допустим, можно выделить (abc)(123) // $1$2
Вот так можно захватить группы в .test, .match, .replace.
А вот как мне эти захваченные группы засторить в переменную?
Т.е. грубо говоря
1. Действие один - где-то захватываю группы (н-р var RegExp=(abc)(123) или хз
2. Действие второе вынести группу $1 или группу $2 в переменную. Чтобы потом можно было реплейсить в стр переменной, в которую засторили группу 1 или группу 2 плюс совершили действие какое-то.
Спс буду иметь в виду. Но уже ебнул через колбэк в реплейс.
BigInt скоро подъедет. Уже в последнем хроме есть.
Ну так он и сказал, что нужно использовать .add вместо оператора
Есть stateful компонент item-editor, в нём два text input и кнопка save.
И есть список items.
При нажатии на строку этого списка в item-editor передаётся выбранный item как prop.
При этом value у input'ов заданы из внутреннего стейта + onChange.
И получается такая хуйня, что всё это не работает.
Потому, что стейт не знает, что проп поменялся, и надо обновиться.
Потому, что реакт - сюрприз - нихуя не реактивный, лол.
getDerivedStateFromProps() - не то.
Делать сайд-эффект в shouldComponentUpdate() - менять там state из нового prop?
Задает полный нубас.
Юзаю я значит Math.random(); и всплыл такой вопрос - по нему совсем малая погрешность, т.е. на 1000 итераций, если брать, скажем, 0.15 как пограничное число, выдаст что-то вроде 144 тру и 856 фолс.
Это Node.js, почему у него ядро такое предсказуемое?
Я сейчас еще запилю хвататель стриков, посмотрю сколько подряд выхлопов дает тру/фолса, но вангую что не много, при таких=то показателях.
Вопрос в догонку, есть ли другие варианты рандома?
Вынеси стейт инпутов в item-editor, раз ему нужно знать об этих изменения, очевидно.
Он там и есть.
Проблема в том, что он должен меняться при смене prop у item-editor - когда выбрали новый item.
Но, нормально это можно сделать 1 раз - в конструкторе.
>При этом value у input'ов заданы из внутреннего стейта + onChange.
>Он там и есть.
Че? Код давай
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
>does not provide cryptographically secure random numbers.
https://nodejs.org/dist/latest-v10.x/docs/api/crypto.html#crypto_crypto_randombytes_size_callback
Мне не для безопасности, просто в Питоновском мате приходилось делать костыль для обрезания долгих стриков, при "шансе" в 1% могло выдать и 300 и 400 фолсов подряд.
Сейчас почитаю что скинул, спасибо за внимание.
Обезьяна конченная зачем ты прокси банишь на /pr/?
Фильтр
https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html
И ты каждый раз в конструкторе ставишь в state одни и те же статичные значения, а не полученные из props
>И ты каждый раз в конструкторе ...
Да неужели, лол.
Естественно - на момент создания компонента редактируемый item не выбран.
За ссылку - спасибо.
Это именно то, что нужно.
В итоге всё, как обычно, сводится к lifting state up.
Реакт, конечно, лютая opinionated xyuta.
Реально, прямо физически утомляет всё это.
Одного китайца, похоже, так утомило, что он аж целый фреймворк написал, лол.
Да это понятно, но, проблема же не в этом.
В итоге, при создании всё равно соответствующие поля в стейте будут пустые.
Вопрос был - как менять state при изменении props.
В принципе, componentWillReceiveProps() - это решение.
(И getDerivedStateFromProps() - нихуя не замена ему, как они пишут.)
Но, они говорят - это антипаттерн, выносите состояние (и обработку его изменений) выше.
Алсо, умиляет, что тот блог-пост всего 10 дней назад написан.
На самом деле - этот пример (и тот, что в блог-посте) - это самая мякотка Реакта, которая показывает всю глубину ебанизма.
Снова вспоминаются всякие афоризмы на тему pure = poor, лол.
Итем лист и item-editor обернуты в родительский компонент. Когда ты жмешь на итем в списке, родительский компонент апдейтит свой стейт {selectedItem: item} и соотвественно ре-рендерит все дочерние компоненты, включая item-editor, куда передает item={selectedItem}. editor инициализируется заново с новыми props и проставляет себе новый state, соотвественно перерендеривая все дочерние инпуты с нужными тебе значениями. В чем проблема, что я упускаю?
Item-editor не создаётся заново при этом.
Конструктор не вызывается.
Стейт не меняется.
Надо использовать componentWillReceiveProps(newProps).
Или выносить стейт и onChange в род. компонент, а item-editor делать функцией, как в примере в том посте по ссылке.
C getDerivedStateFromProps() у меня (вчера) не получилось, надо попозже ещё попробовать, возможно, я чего-то недопонял.
Чтобы было понятно, зачем я со всем этим ебусь - я хочу понять, чего оно вообще стоит, в целом, прежде чем всерьёз в это ввязываться.
Потому, что Vue мне кажется в разы более практичным.
И кроме удовольствия других эмоций не вызывает.
Но, у React мне нравится инструментальная поддержка, и вообще то, что это чистый JS.
Но, если за эти ништяки надо заплатить слишком дорого - то пусть оно идёт на хуй.
Потому, что для Vue инструментальная поддержка тоже неплоха (для single file components), а бойлерплейта там в разы меньше. И куча дополнительных ништяков. И можно даже писать в react-стиле на JSX (но неинтересно и не нужно, в большинстве случаев).
>Потому, что Vue мне кажется в разы более практичным.
Вьютух становится всё изобретательней. Уже целую многоходовочку с лифт-стейтом разыграл, как по нотам.
Все, я разобрался. Да, думал, что конструктор вызывается при каждом рендере, потому что с реактом работаю недавно, но в принципе проблема понятна - ты пытаешься менять один и тот же логический стейт(значения инпутов) из двух разных мест, вот реакт и выебывается, потому что локальный стейт должен меняться только изнутри объекта, а не откуда попало.
> Вьютух
Ты имеешь в виду некоего хуя, который по весне форсил тут Vue?
Я не он, лол.
>как по нотам
По хуётам.
Просто у меня стиль работы такой - докапываться до самой мякотки. И я, похоже, её нашёл.
Всегда есть какая-то одна проблема, которая тянет за собой остальные.
Костыль в виде getDerivedStateFromProps() - это и есть попытка это исправить. Надо с этим разобраться, пока не понял, будет ли с этого толк.
Что касается практичности, Vue - охуенно практичная вещь. И весьма сбалансированная.
И значительно менее opinionated, чем реакт.
Пока реактоблядки разбираются где паттерн, где антипаттерн и хуярят тонны бойлерплейта - на Vue просто пишут компактный работающий код.
Тут главное, чтобы в будущем они не понаделали какой-нибудь хуйни, в попытке улучшить хорошее.
А реакт имеет то преимущество, что ломать там просто нечего, лол.
>Костыль в виде getDerivedStateFromProps()
Это не костыль, это возможность для реализации edge-cases. Твой случай решается по-другому, выше ссылка уже была. Конкретно объясни, что в этом решении тебе не нравится и зачем ты хочешь менять стейт и снаружи компонента, и внутри, когда можно его вынести в одно место и сразу видеть, все случаи, как и из-за чего он может измениться, а не гадать по кофейной гуще с дебагером.
>что в этом решении тебе не нравится и зачем ты хочешь менять стейт и снаружи компонента, и внутри
Речь идёт о низкоуровневом, "техническом" стейте - необходимом для функционирования controlled input.
И мне бы хотелось, чтобы он был инкапсулирован там, где он используется.
И я не хочу его менять, я хочу его за-менять, полностью.
А мне предлагают всё это говно тащить на самый верх, ибо иначе (через componentWillReceiveProps()) - "антипаттерн".
И тут мы приходим к интересному выводу.
Дело в том, что Реакт - это библиотека (не фреймворк).
И делает она только view. Больше там нет нихуя.
И совершенно _любой_ (встроенный) стейт в Реакте - технический, низкоуровневый. Предназначенный исключительно для функционирования внутренней механики view.
И делать на нём какую-либо бизнес-логику совершенно неправильно.
Но, большинство людей этого не понимает, и пытаются.
Отсюда и все эти тучи разъяснений и поучений в интернетах, как надо и как не надо юзать Реакт.
Короче, смысл в том, что в чистом виде Реакт _вообще_ не пригоден к использованию. К нему _обязательно_ , сразу же. надо наворачивать что-то для поддержки бизнес-логики. Редукс, МобИкс, event bus, что угодно.
И это-то мне и не нравится.
Хотя, этот недостаток, по сути - ни что иное, как продолжение достоинств.
Короче, как я уже тут писал - слишком низкоуровнево и слишком затратно.
Согласен, реакт _параша_ та еще.
>Речь идёт о низкоуровневом, "техническом" стейте - необходимом для функционирования controlled input.
У инпута единственный стейт - это его значение. То, что ты можешь его менять через onChange, не значит, что он технический. Просто браузер предоставляет тебе функционал для детекта ввода от юзера, который реализован через эвент. Если ты хочешь детектить другие эвенты(клик по списку итемов) и изменять значения инпута соотвественно, то тебе нужно каким-то образом связать инпут еще и с тем эвентом. Реакт считает, что все эвенты, которые влияют на стейт компонента, должны объявляться и триггериться в одном месте. Для этого и нужно lifting state up, чтобы обернуть связанные между собой компоненты и объявить эти эвенты. Я по UI не эксперт, так как работаю в основном с серверной частью, но по-моему это вполне здравая идея.
>Дело в том, что Реакт - это библиотека (не фреймворк). И делает она только view. Больше там нет нихуя.
Это должно было стать понятно сразу после прочтения доков. Из-за этого он мне и понравился, но понятное дело, что если ты начинаешь в любых вьюхах(не только реактовских) хуячить что-то кроме презентативной логики "взять то, поставить туда", то рано или поздно останешься с кучей неподдерживаемой хуйни. Об этом знает любой, кто работал с каким-то популярным MVC фреймворком.
MVC в современном понимании - это полная хуйня, которая не работает, как только твое приложени становится чуть сложнее палки. Ну нельзя всю логику запихнуть в модели/контролеры/вьюхи и не остаться с кучей говнокода, который не принадлежит ни к чему
>Всё так?
Ну, это очень вольное толкование, лол.
Вообще-то, Redux (Flux) - это альтернатива MVC.
https://habr.com/company/tuturu/blog/321820/
http://tech.toptable.co.uk/blog/2015/01/01/explaining-flux-architecture-with-macgyver-dot-js/
https://www.infoq.com/news/2014/05/facebook-mvc-flux
google: flux architecture vs mvc
>>13138
Всё так и есть.
>>13071
Я тут переосмыслил эту тему.
На самом деле, то, что я пытался делать с Реактом - это как раз таки попытка сделать классическое "клиентское" MVC.
Там, как раз, бизнес-логика вперемешку со техническим стейтом.
Взять, хотя-бы, Java Swing.
Вот тут эта проблема хорошо описана:
https://habr.com/company/tuturu/blog/321820/
А Реакт для MVC не годится.
Т.е. можно, но некрасиво получается.
Да и незачем, лол.
Конкретная же описанная проблема решается через ресет стейта под новый item в componentWillReceiveProps(). Всё работает просто замечательно.
Профит с этой темы ооооочень хороший
Но я в России, хуй пойми откуда он берет Саудовскую Аравию.
Это санкции против России. А вообще попробуй добавить .toLocaleString()
Профит с этой темы ооооочень хороший
В этой проге скорее всего джава скрипт
Зацените охуенную штуку:
https://vimsical.com/
Пишешь код (+ чтмл, цсс), он его исполняет и делает из него интерактивный скринкаст. Может я слоупок, но я охуел, даже не думал, что так можно, лол.
Попенсорсно (код на кложе+кложескрипте): https://github.com/vimsical/vimsical
Вопрос только - нахуя его сохранять в классе? У тебя при каждом созданном объекте This.self будет перезаписываться.
Точно, спасибо, анон. Как то провтыкал это. Как тогда лучше следить за этим this, есть какой то лайфхак?
Я не очень понял, чего ты хочешь?
Зачем следить за this?
Это ссылка объекта на себя, она не меняется.
Ты хочешь создавать объекты и запоминать их ссылки? Тогда это называется Factory pattern.
>Это ссылка объекта на себя, она не меняется.
Это в других языках, в JS же this ссылается на контекст, а не на инстанс объекта.
А мне вызывать потом в колбеке нужно будет пару методов, в итоге все поломается, потому что this будет хер знает что
Понятно.
Тебе надо self = this.
Это руками, везде, где this может быть неправильным.
Напр. тебе из метода объекта надо вызвать колбек, и внутри колбека обратиться к объекту.
Тогда в методе перед вызовом колбека пишешь const self = this.
А потом уже в колбеке self.someProp ...
Также, можно привязывать колбек к this объекта.
Точнее, создавать новый колбек, привязаный к нужному this:
this.boundCallback = someCallback.bind(this);
В реакте так делают - в конструкторе класса.
Дед, ты же умер в 2009.
Можно ещё и делать someCallback.call(this, arg1, arg2, ...) или someCallback.apply(this, argsArray).
Так что, в большинстве случаев использовать self = this просто не нужно.
ну, при ероре у тебя функция вернет ерор, при результате, результат. ты тупа смотришь, не ерор ли это
Vue не "менее opinionated", а намешивает ангуляр с реактом, чтобы ублажить и тех и тех, без своего видения или идеи.
Да просто надо писать по книге «Vuex Concepts» (Daniel Schmitz & Daniel Pedrinha Georgii), а не скрещивать бульдога с носорогом. Получится тот же React/Redux, но более быстрый, за счёт отсутствия VirtualDOM.
Вот она:
https://bit-ly/2K5Yw6p
Тут вместо «-ly» набрать «.ly»
Из браузера - никак, js не имеет доступа к файлам системы. Можешь искать API борды, скорее всего там есть такая возможность, сможешь на ноде скрипт написать.
>learn.javascript.ru - Самый главный русскоязычный сайт по JavaScript. Других таких подробных уроков не найти. Начинать строго с него.
Пиздец, ну и говнина этот кантор, нихуя толком не объясняется и вообще какая-то ебанина.
Сейчас читаю одну книжку (на английском) про жс, и охуеваю с того, как я жил раньше и не знал основ.
Ну а хули делать, вкатывальщики обычно английский знают на уровне бе ме, а потом уже подтягивают хотя бы до чтения технической литературы. Им кантор самое то.
>Vue
>но более быстрый, за счёт отсутствия VirtualDOM.
>отсутствия VirtualDOM
Ты, я смотрю, просто эксперт.
В пионерлагерь-то чего не поехал?
Или прямо оттуда двачуешь
>>13495
>намешивает ангуляр с реактом
Ты, вообще, понимаешь, что такое ангуляр?
Видел его?
Сходи, посмотри, лол.
>без своего видения или идеи
Там есть охуенная идея.
Весьма необычная для фронтенда в наши дни.
Она в том, чтобы не заставлять людей натягивать сову на глобус и и потом дрочить вприсядку, как в реакте и ангуляре.
А дать им возможность плодотворно работать в том стиле, который они предпочитают.
И там компоненты - это именно компоненты, в том смысле, в каком их понимает нормальный человек, а не просто кусочки хуйни, как в реакте.
>Пиздец, ну и говнина этот кантор, нихуя толком не объясняется и вообще какая-то ебанина.
Приятно встретить понимающего человека.
Реально заебали уже это говно форсить.
Книг полно.
В том числе и хороших.
http://eloquentjavascript.net
https://addyosmani.com/resources/essentialjsdesignpatterns/book/
(эти две читать прямо на сайте)
http://www.allitebooks.com/secrets-of-the-javascript-ninja-2nd-edition/
http://www.allitebooks.com/the-principles-of-object-oriented-javascript/
http://www.allitebooks.com/understanding-ecmascript-6/
http://www.allitebooks.com/functional-javascript/
http://www.allitebooks.com/reactive-programming-with-rxjs/
Вот ещё нестареющая классика:
http://www.allitebooks.com/javascript-the-good-parts/
JavaScript Allonge погугли ещё.
Курсы и прочее подобное - гугли.
Алсо - вот Eloquent Javascript на русском:
https://habr.com/post/240219/
Это в шапке, в материалах для изучения, кстати.
Не пренебрегайте.
Ну а если файлы брать не из системы а из самого треда? Где ссылка на изображение должна прописываться?
Ты наверное путаешь степень с https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Bitwise_XOR_assignment
Чтобы возвесть в степень используй Math.pow
В теле POST-запроса. И не ссылка, а base64encoded image data, сформированная через BOM API.
Да, да, я проебался конечно. Простите. Привычка.
дай угадаю: ты долго ковырял Кантора, потом бросил, начал читать книжку, все стало усваиваться лучше и ты сразу такой: бляя) кантор хуйня какаято непонятная, книга лучше оказывается)
Расскрою секрет - если бы ты сначала ковырял книгу, а потом начал Кантора, тебе бы второй ресурс показался понятнее, потому-что ты уже пришел туда с какими-то знаниями, и начал просто их раскладывать по полочкам и систематизировать.
Просто, я часто смотрю видосики на ютубе, и там всегда находится какой-нибудь восторженный долбоёб который напишет: спасибо автор!! я уже на трёх разных ресурсах учил <<хуйнянейм>> и только у тебя я понял, потому-что ты лучший!!!!. Нет бля, он не лучший, просто тебе долбоёбу нужно четыре раза объяснить всё с разных сторон, чтобы ты понял.
А вообще, я считаю именно книги хорошим способом упорядочить знания, а для первых шагов лучше использовать метод теория+практика в одинаковых дозах, а Кантор для этого подходит лучше
По-моему браузер вообще не позволяет жсу хоть как-то менять значение файл инпутов. Можно разве что самому составить кастомную формдату, куда и включить эти файлы, после чего запостить.
Кантор хорошо когда нет опыта вообще.
Изучал веб-стек php, js, html, css (ну и периферию в виде протоколов, бд, етк) руководствуясь лишь спеками и справочниками. С нуля. До этого не знал ничего вообще.
Из книг считаю вообще напрасной тратой времени читать что-то по конкретным языкам. Читать можно лишь что-то монументальное по алгоритмам, по операционкам, архитектуре, сетям, или философское, по типу Раскина или Макконела, если любопытно. А языки изучать по книжкам, это это от лени какой-то.
Двачую вот этого дядю.
позволяет только сбросить значение пустой строкой. а что измениться если заменить форму? то есть в ней же тоже будет инпутфайл, которому нельзя задать значение програмно.
А я Гарри Поттера любил читать, это по-твоему тоже трата времени?
да не я думал меня сольют, начали задавать вопросы аля как происходит процесс рендеренга страницы чем прототипная парадигма отличиается от ОО и я чет поплыл. Что даже для меня удивительно т.к. большинство ответов на большинство вопросов я знал.
Сидел мямлил что-то невнятное.
Что еще спрашивали, довай подробностей
Не сильно он тех. терминами перегружен? Со словарём осилить можно? А кто попробовал Выразительный Javascript и охуел и от абстракций и афоризмов разных.
Не знаю, не читал. Попробуй.
Актуальная. Тут тебе сразу про стелочки расскажут, про let, про const. В русиче дай бог отдельно есть, если есть вообще инфа конкретно от него про всё это.
>Что там хуево объясняется?
Хуёво - это не "что", это "как".
Информации куча, да. И она достоверная.
Но, в качестве учебника с нуля, для человека, не умеющего программировать - хуёво.
А его именно в таком качестве и пытаются использовать.
Чтобы было понятно о чём я - посмотри серию книг "Grokking ..." или тот же "Head First ...".
Или совершенно охуенную митовскую "Once Upon an Algorithm".
>const
Никогда кстати не использовал эту залупу, и не могу представить юзкейс, где она бы решала какую-то проблему, а печатать на два символа больше - идите нахуй. Особенно умиляет, что во всех гайдах теперь пишут const hui = require("penis"). В жс-манямире серьезно есть макаки, которые переписывают внешние переменные внутри функции?
Хочу чтоб было так:
// какая-то кнопка
<input type="submit" onclick="showJSON()">
// на клик мой json прилетает
function showJSON() {
fetch('my.json')
.then(function(response) {
return response.json();
})
.then(function(myJson) {
console.log(myJson);
});
}
console.log для примера, там конечно иной функционал.
не понял что ты хочешь? Ты хочешь что бы вместо стандартного сабмита был аякс?
Тогда просто отмени стандартное действие браузера - event.preventDefault()
>Тогда просто отмени стандартное действие браузера - event.preventDefault()
Или пусть type="button" использует.
Например, + это не знак сложения, а функция, которая принимает два аргумента и возвращает одно?
Т.е.:
var a = b+c;
Это:
var a = function +(b,c){
return //сумма b и c
}
В этом треде пять лет сидишь? Я ж говорю, что никогда не вкатишься.
Логически - да. Практически - зависит от языка. Обычно +/*- и т.д реализованы как специальный оператор, а не функция.
1280x720, 6:32
Чувак на видео говорит, как я описал выше, что это функция.
Но нигде в интернетах я не нашёл подтверждения, вот я и запутался - прав он или нет?
Функция это инкапсулированная часть кода. + в контекст инкапсулированного кода никак не вписывается. Конкретно в жс, + это оператор, а какой любой другой оператор он возвращает значение. По итогу выполнения инструкции да, похоже на функцию. Семантически нет, это не функция.
Если мои слова для тебя пиздеж тупой, иди на википедию, читай, что такое функция и сравни её с оператором +.
>Даже видео называет Операторы, а не функции.
Смог всё-таки перевести название через гугл транслейт, молодец. Жаль только, что содержимое не осилил.
Ну куда уж мне до тебя.
1) Сделать сайт. Стиль и содержание не важно.
2) Разместить на всех страницах меню для перехода по страницам с использованием javascript XMLHttpRequest.
переход по страницам без перезагрузки)
3) Для реализации не использовать сторонние js плагины, только нативный js.
Так это первый сайт в моей жизни очень туплю. Результат 15ти часов мозговых усилий работает так:
Со стартовой страницы localhosta переход действительно выполняется без обновления странички. Однако затем наступает крах. Т.е. перешёл с main на, скажем, 1 - всё ок. А уже обратно - нет. Впрочем, если затем перейти, допустим, с 2 на 3, то код тоже не сработает, но зато сработает ОБРАТНО. Короче, я запутался совсем.
КТО ПОМОЖЕТ РАЗОБРАТЬСЯ - СКИНУ 100 РУБЛЕЙ НА ТЕЛЕФОН
>const
>не могу представить юзкейс, где она бы решала какую-то проблему
Есть такая вещь, как стиль.
В смысле - хороший.
Или его отсутствие, вот, как в твоём случае.
Бегло просмотрел видео без звука.
Так про другое, лол.
Но, если тебя возбуждают такие вещи, тебе обязательно надо открыть для себя LISP (Scheme).
Кстати, есть такая точка зрения, что JS - это Scheme с сишным синтаксисом, лол. Только не надо понимать это буквально.
Тогда чому челик выше про яву пишет?
Ты про возврат функции в return и с помощью этого последующий доступ в закрытую функцию замыканием?
Я как раз это и делаю и че-то не совсем понимаю пример этот: https://learn.javascript.ru/bind#решение-1-сделать-обёртку
Ну блин. Привыкай.
У нас тут коллбеки, замыкания, контексты. Можем явно указывать, что является this...
Я сам с джавы пересел на джваскрипт, некоторые моменты показались очень странными.
Крч смотри.
Ты передал функцию, в которой есть обращение к контексту (this). Ты передал саму функцию, отдельно от объекта user, потому что user.sayHi не более, чем переменная.
Отличный пример того, что этот ваш кантор - полное говно в качестве учебника.
Если ты о первом блоке кода в подразделе, о том, где написано "Теперь код работает, так как user достаётся из замыкания." - то смысла в нём нет вообще никакого, поэтому искать его бесполезно.
>Если ты о первом блоке кода в подразделе, о том, где написано "Теперь код работает, так как user достаётся из замыкания." - то смысла в нём нет вообще никакого, поэтому искать его бесполезно.
Два чаю.
Я всегда говорил, что этот ваш кантор говнище полное.
> setTimeout(user.sayHi(), 1000);
Не будет работать, потому что функция выполнится сразу же, ибо скобки, а для таймера нужно «без скобок».
В setTimeout нужно передавать функцию, которая выполнится через время во втором аргументе.
Если передавать в setTimeout функцию(), то функция выполняется сразу, а setTimeout будет пытаться выполнить уже результат выполнения функции через указанное время.
будет
Бинд будет работать, бинд возвращает из себя функцию.
Апплай и колл не будут, они выполняют функцию сразу.
Парни, две сотки!
>3 < 2 < 1;
Свою тупость пришел показать? JS не поддерживает комбинированные сравнения. Правильно писать так
a = 3 < 2 && 2 < 1;
>a = 3 < 2 < 1;
>a = (3 < 2) < 1;
>a = false < 1;
>a = true
Что тебе не понятно? Не осилил неявное приведение типов?
Мерси за стек. А с реакт нейтивом проблем много? Нативные компоненты для реакт нейтива специальные ведро/ябло-программисты пишут?
Особых проблем нет, как обычный реакт, различий минимум. У нас апликуха чисто под андройд, и я иногда предлагал ПМу некоторые нативные вещи писать самому (хорошо знаю джава), но он отказывается, говорит, проще найти готовые решения, и пока все находили.
Я на самом деле много вещей из стека пропустил, их так и не упомнишь. Redux, postcss... много чего используем.
На самом деле, им можно пользоваться как учебником, но, при условии, что ты не воспринимаешь его как истину в последней инстанции.
Непонятно что-то - загугли.
Думай сам, короче.
В любых учебниках и книгах всегда есть ошибки или неудачные примеры. Поэтому, всегда надо сравнивать в сомнительных случаях.
В данном случае, проблема в том, что он, желая проиллюстрировать идею замыканий, карринга и прочего, привёл совершенно негодный пример. Даже анти-пример.
И даже ньюфагу, вроде тебя, это понятно.
Если интересно, что ещё бывает из учебных материалов - читни этот тред за последние пару дней, хотя-бы. Ну и шапку, конечно.
Что это за оператор?
Вот ветка в которой только мои изменения, перенес функционал чата (личный кабинет) с jquery на реакт(не весь еще) и верстку (готовую) по компонентам разбросал
хуйня, я делал парсер, который пиздил цп у роскомнадзора
То есть по сути ты нихуя не сделал, а только слепил из одного говна другое, макака?
Лол, думай как хочешь , я дохуя чего сделал, мне то по кайфу в 16лет рубить доухя бабла
Я немного больше получаю (в 10 раз), но все равно мало. А ты дальше хуярь свое говно на джиквери
>Я немного больше получаю (в 10 раз)
Ну, знаешь не намного больше меня(850).
А ты дальше хуярь свое говно на джиквери
>Соре, реакт онли
Налажал с ">" ))
>У тебя еще все с математикой хуево, ясно
че ты до математики доебался, лол. Я к тому что тебе за 20, а мне 16 и относительно этого разница небольшая.
Ты сказал 1500, лол, а че так мало?? Нормальные кодеры по 2500+ берут, я еще джун со мной все ясно, а ты ??
Кантор тоже не может в карринг.
Потому, что то, что он называет каррингом, на самом деле называется partial application.
А карринг - это немножко другое.
>Кантор тоже не может в карринг.
Та как так? Он же кумир молодежи. Идол вкатывальщиков. Учился в самом МГУ, защитил кандидатскую диссертацию. Неужели правда не может? Неужели? Неужели правда? Я не верю! Слышите! Не верю!
>в соответствии со спецификацией.
Какая ещё спецификация, лол?
Ты ответь на вопрос, зачем ты взял в скобки 3 и 2?
Всё ясно с тобой, школолошка.
Скорее бы у вас уже каникулы закончились.
Ещё и сажу прилепил в тематике, лол.
>зачем ты взял в скобки 3 и 2?
Тебе ответили выше. Ты дурак?
Тебе показали порядок вычислений. Дечись.
Это ты дурак, если не знаешь, что скобки - это ВНЕЗАПНО тоже оператор, и не можешь объяснить, почему там такой как ты скОзал порядок.
> не можешь объяснить, почему там такой как ты скОзал порядок
Тебе так же ответили, почему там именно такой порядок.
И почему же?
>>15149
Вот только я знаю ответ, а ты нет. И кто из нас после этого дебил?
Люблю спрашивать на собесах этот вопрос, и всякие вкатывальщики начинают бубнеть под нос что-то несуразное - ведь они учились по кантору и кокодемии, где их учили формочки шлепать, а как устроен язык они не знают.
На каких собесах, шизик? Ты опять таблетки забыл принять? Ты же, блядь, унитазы чистишь в Макдаке!
Годнота довольно сомнительна, мне кажется.
И операция очень затратная была бы.
У тебя, скорее всего, что-то не то с постановкой задачи или со структурой дома.
>и потом вообще ничего не писать и получать пассивный доход
>пассивный доход
Перекатиться в гей-шлюхи, очевидно же.
Скажем есть строка, пускай будет 'Hello, World'. Есть еще одна строка, пускай будет 'Hello, Wo'. Каким образом мне найти оставшуюся часть второй строки до первой? То есть rld?
Спасибо.
Пока курил придумал, что если тупо взять из разности длинны строк индексы и найти что надо? Не совсем хуйня получается?
Это если ты 100% уверен, что одна строка является началом другой.
Т.е. надо добавить проверку sA.startsWith(sB).
https://codepen.io/anon/pen/XYYWLK
с меня сотни нефти
добавь к меню1 класс menu-item--active, а в стилях пропиши .menu-item--active .submenu {display: block}
>О регулярках не слышал?
Слышал конечно. Но изучить как-то руки не доходили. Охуенная оказывается вещь, строку блядь менять можно как хочешь. на хую прямо вертеть!
Спасибо большое. Немного по-другому сделал.
Не подскажешь как сделать так, чтобы меню не пропадало, когда кликаешь вне меню?
Попробуй запихнуть в условие кликера на документе что-то типа target.id! = 'nav' или target.tagName != 'body'
Так?
document.getElementById('nav').onclick= function(event) {
var target = event.target; // где был клик?
if (target.className == 'menu-item' && target.className!= 'result') {
var s=target.getElementsByClassName('submenu');
closeMenu();
s[0].style.display='block';
}
}
не выходит что-то.
остальные поддержали
state = { value: this.props.value }
дополню: через какой хук теперь отлавливать новые props, если componentwillreceiveprops обьявили устаревшим?
Не, в другой кликер, который на документ вешается
>componentwillreceiveprops обьявили устаревшим?
Да, реакт ни разу не opinionated, lol.
На самом деле, они делают всё это из-за сервер-сайд рендеринга и прочих оптимизаций, имеющих значение для сайтов типа фейсбука, с десятками миллионов посетителей.
Типа - да, надо дрочить вприсядку, но зато ...
А на простого васю из мухосранска им глубоко поебать.
{
rows.map((row) => (
<TableRow key={row.id}>
{
row.map((cell) => (
<TableCell>{cell}</TableCell>
))
}
</TableRow>
))
}
Так делаю, но выдает row.map is not a function.
Точно, там объект.
Stateless компонент - это функция.
Может ли быть функция в функции?
Конечно, может.
Вот прямо только что такую написал, и именно в функциональном компоненте, лол.
>>15744
Тэги JSX - это вызовы функций, возвращающие значения. Аттрибуты = параметры.
Исходя из этого и определяется, что можно, что нельзя.
Да, так и делают.
Но, в твоём случае row.map((cell) => ... выглядит как-то сомнительно. Не в смысле говнокода, а вообще. Хотя, выше уже написали.
Вообще - посмотри примеры в интернетах, их же полно.
Это не просто не говнокод.
Это ровно наоборот, лол.
Особенно, если ты используешь лямбды (толстые стрелки). Только нужно иметь в виду, что у них нет своего this.
Вот тебе, кстати, пример (хотя, немного на другую тему):
const add = a => b => c => a + b + c;
Это функция - функция - функция.
В middleware к редуксу такие вещи можно увидеть, например.
В данном случае - это каррированая функция сложения трёх аргументов.
Вызывается так:
const result = add(1)(2)(3);
Или так:
const add1 = add(1);
const add1and2 = add1(2);
const result = add1and2(3);
Т.е. можно получать промежуточные специализированные варианты.
Напоминает наследование в ООП.
Он же не про это. Он в своих функциональных-компонентах хочет просто обьявлять функции-помощники. Он не собирается их возвращать. Он хочет их использовать просто как использует методы в классах-компонентах
Я сам правда не знаю принято ли так делать, или лучше функции обьявлять не в самом компоненте, а вне его.
Я же написал - это пример немного на другую тему.
А перед этим ответил ему, что да, так делают.
И это не говнокод.
Объявлять ли функцию отдельно, если она специализированная для этого компонента - дело вкуса. Если она большая, то да, это имеет смысл.
Смысл того, что я хотел сказать, в том, что функция в JS - это ровно такой же объект, как число или массив.
Ты же используешь числа в функциях?
Ну и вот.
А как бы ты хотел это записывать?
Нормальный стиль, лучше не бывает, на самом деле, ты просто не привык, лол.
Ты пытаешься в голове что-то наворачивать поверх этих стрелок, в то время, как их надо просто читать буквально.
https://github.com/realtime-framework/unity3d-plugin/blob/master/lib/WebSocket.jslib
Ох ебать, маня прошла пару курсов говнокекслета и всем поясняет про то как надо читать и воспринимать блять.
Перекатиться из мертворожденного языка для смузихлебов в один популярнейших и востребованных языков мира.
Все правильно делает.
Есть веб-приложение на чистом реакте, в нем - корневой компонент, как полагаться - es6 class.
У этого класса есть метод, componentWillMount, где я открываю вебсокет. JSON с сервера обновляет стейт, что позволяет отображать данные в реальном времени, а JSON с клиента обновляет определенные данные на сервере. Всё работает, но только на десктопе. В мобильном браузере - не работает ws. При том что поддержка ws у него есть. react-websocket не подходит, т.к. нужна двухсторонняя передача данных, а у него нет метода send, AJAX параллельно сокету выглядит костыльно.
Да я для своего проекта. Слишком много говна накопилось чтобы руками тестить
Нарыл гайд, но там еще дженкинс, а он мне пока нах не нужен. Думаю как этот индус сделать.
https://medium.com/prismapp/10-steps-how-to-automate-your-api-testing-effectively-af866fba942f
подскажите плиз ньюфагу - как перемножить два больших числа так, что бы в результате не было что то типа такого 1.7588313343976082e+21 а было бы само число
его ведь можно как-то преобразовать, правильно? но как??
Это троллинг тупостью?
[CODE]
describe('GET /user', function() {
it('respond with json', function(done) {
request(app)
.get('/user')
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200, done);
});
});
[/CODE]
не сделать json в котором описать все тесты, типо:
[CODE]
{
"name": "test login",
"main": "server.js",
"tests": {
"test0": "foobar",
"test1": "foobar",
"test2": "foobar",
"test3": "foobar",
"test4": "foobar",
"test5": "foobar",
"test6": "foobar",
"test7": "foobar",
"test8":"foobar"
},
[/CODE]
где foobar это конструкция вида
[CODE]
{
"request": "localhost:8080/api/login",
"data": {
"login" : "foo"
"password":"bar"
},
"headers": {...},
"positivecase": {...},
"negativecase": {...}
}
[/CODE]
Скорее всего проебусь с разметкой, но суть вы поняли. Может в треде есть дохуя опытные автотестеры чтобы пояснить мне нубу, почему моча такая какая она есть?
[CODE]
describe('GET /user', function() {
it('respond with json', function(done) {
request(app)
.get('/user')
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200, done);
});
});
[/CODE]
не сделать json в котором описать все тесты, типо:
[CODE]
{
"name": "test login",
"main": "server.js",
"tests": {
"test0": "foobar",
"test1": "foobar",
"test2": "foobar",
"test3": "foobar",
"test4": "foobar",
"test5": "foobar",
"test6": "foobar",
"test7": "foobar",
"test8":"foobar"
},
[/CODE]
где foobar это конструкция вида
[CODE]
{
"request": "localhost:8080/api/login",
"data": {
"login" : "foo"
"password":"bar"
},
"headers": {...},
"positivecase": {...},
"negativecase": {...}
}
[/CODE]
Скорее всего проебусь с разметкой, но суть вы поняли. Может в треде есть дохуя опытные автотестеры чтобы пояснить мне нубу, почему моча такая какая она есть?
Да вот уже рука порывается, но ради своего проекта не хочется еще и движок для тестов писать 3 дня. Легче уже руками протестить, написав тест дизайн. Но бля... Че за черт эта моча?
Мока лишь среда тестирования, она условно говоря проходит по файлам, ищет тесты среди них и запускает, а за синтаксис обычно отвечают всякие там Chai(или supertester судя по тому что ты скинул)
Т.е отдельно автотесты я написать не могу? Только в код интегрировать? А минифицировать потом файлы для прода можно будет? Просто ну пиздец если еще и тесты в коде будут, то получится гигант просто.
Да понятно как оно по английски читается, но людям не англоговорящим сочетание ch читается как "ч" интуитивно.
Не зря я отдельную ветку завел... Ну пиздец теперь... А где есть документация этого чуда? Просто на их сайте нет. Да и туториалы всяких васянов читать себе дороже
Да я то знаю, я говорю за большинство, просто у меня в детстве была чашка с принтом "mocha". Пока английским не занялся в плотную, думал что это чашка для мочи
Тут недавно был чувак, который яростно топил за тесты в js.
Перечитай прошлый тред, там много годных советов было.
Ок. спс
А, так у тебя число в 21 степени, оно хуй у тебя запишется просто так.
Как оно работает, может кто-нибудь тугому объяснить? Вот мы задаем значение num для функции, а как и откуда потом появляется acc, как на 7 строчке оно работает если не вводили никаких acc? С рекурсией все было намного понятнее.
Так это и есть рекурсия.
acc - это параметр внутренней функции iter.
Сначала iter вызывается с параметром 2.
А потом - рекурсивно, с уточнённым параметром.
Пока не будет достигнуто одно из условий выхода из рекурсии (if'ы).
Имя переменной acc - подразумевает аккумулятор (в рекурсивных функциях).
num берётся из внешней функции.
Тебе надо разобраться с замыканиями (closure) и рекурсией.
acc - это параметр внутренней функции iter, а для чего ему параметр 2?
https://jsfiddle.net/q6v79gnu/8/
Вот меняю параметр и ничего не меняется, почему так, зачем он? в бесплотных на хеслете говорят что итеративное решение
Например, надо найти наименьший делитель для числа 5. Это будет само число 5, естественно.
Тогда будет такая цепочка вызовов:
iter(2){iter(3){iter(4){iter(5)}}}
Слово return я убрал, оно подразумевается.
Т.е. iter(2) вернёт результат _позже_ всех, когда все внутренние вызовы вернут результаты в обратном порядке.
Т.е., число 5 будет передано по цепочке вызовов наверх.
2 - это то, с чего начинают искать ответ.
Это не параметр, а значение параметра.
Можешь хоть с 100 начинать, только вот, что ты найдёшь таким образом?
>говорят что итеративное решение
Нет.
Это рекурсия - функция вызывает сама себя с новым значением параметра.
Другой вопрос, что рекурсия тут простейшая, и её можно просто заменить на цикл.
class myClass { constructor(a){ this.a = a; this.b = this.a*2;} }
let obj = new myClass(5);
obj.a выдаст в консоли 5, а obj.b выдаст 10
но при этом если присвоить
obj.a = 6
то obj.b по-прежнему будет показывать 10!
why?
как эту срань перерассчитать?
>как эту срань перерассчитать?
Если тебе нужно именно это, надо делать геттер (гугол в помощь).
Или просто метод getB() {return this.a * 2}
Что тебя смущает? То, что значение переменным присваивается при создании объекта, или то, что b хранит значение переменной, а не ссылку на a?
Насколько я знаю, в жс ссылочное присваивание идет только к объектам и функциям.
>>16495
Дело тут совсем не в том, ссылка это или нет.
А в том, что _выражение_ вычисляется один раз в конструкторе, при создании данного объекта.
Хочешь, чтобы оно каждый раз вычислялось - так и вычисляй каждый раз - в геттере или в методе.
Короче, пойми разницу между значением и выражением, и т.п.
SSD нужно ставить.
И Core i5 + 8 Gb.
Алсо, ноутбук для серьёзного кодинга - это не очень хорошая идея.
Мобильный проц он такой мобильный, лол.
Или ты думаешь на нормальном процессоре полкило меди просто так висит?
Не надо смотреть на хипстеров в кофешопах, это просто картинки.
А суровая реальность - сурова.
Охуеть, я-то думал, что вы будете отвечать, мол, конечно, потянет, это же Вебсторм, а не Far Cry 5. А тут вон всё как печально. :(
Да, разобрался, спасибо. Так и пришлось мутить сеттер, чтоб он "переустанавливал" заново нужные мне поля
Посмотрел у себя.
На десктопе i7 3770K + 16 Gb + SSD Samsung 850 Pro 256 Gb.
Запущеа идея, в ней открыт большой java проект.
И запущена виртуальная машина VmWare с сервером.
Памяти израсходовано 5.1 Gb.
Всё работает быстро и хорошо.
JavaScript побольше отожрал бы, конечно.
Но не думаю, что намного.
Короче - ssd + проц решают.
Под правильно я подразумеваю, что установка зависимостей и конпеляция должны происходить на билд-сервере. То, что есть в документации PM2 — это какой-то пиздец: git clone, npm install, grunt dist выполняется на целевом сервере.
Очевидное решение — копировать билд-артефакт с помощью rsync и вызывать "pm2 reload" через ssh, но вроде как PM2 уже предоставляет средства удаленного деплоя, так что странно им не воспользоваться, если он настраивается как надо.
А нужен ли тебе жырный вебшторм, если в VS Code есть все необходимое?
Привет анон! подскажи пожалуйста по нескольким вопросам.
Есть JS динамически генепирующий кучу контента типа статей
Есть директория к кучей изображений и текстов .
Я к сожалению пока пишу только на JS и то новичок , поэтому не придумал ничего лучше чем забирать тексты из JSON ajax запросом и для каждой картинки прописывать URL и высоту- ширину . В общем кошмар .
Задача "сгенерировать HTML считывая картинки и тексты из файлов" вообще решается только на JS с jquery ?
Если нет скорее всего нет какой самый простой бекенд для этого нужен. Может джанго или rails
Попробовал, но он срабатывает два раза: один раз с предыдущей длиной, второй - с новой. Так и должно быть?
А массив у тебя как в компонент попадает?
>одно поле стейста подсчитывало длину массива в другом поле?
Спрашивается, нахуя?
Вычисляй вычисляемое прямо в render() или где ты там его используешь.
Один из хороших принципов программирования - не храни лишние состояния без нужды.
Если они логически не связаны или общий родитель слишком далеко, то создай простенький стейт контейнер сам, это не сложно. Необязательно глобальный.
А рефы тут причём?
Общее состояние вынести наверх, в общий компонент, да.
Если общего компонента нет - создать фейковый.
В процессе можешь поймать себя на мысли, что уже пишешь редукс. В этот момент надо перестать - он уже есть готовый, лол.
Шизоид, не позорься хоть.
>Шизоид
Это ты меня, типа, оскорбил, лол?
Аргументы будут?
У тебя очевидные проблемы с пониманием смысла слова "композиция" (и слова "шизоид", кстати).
Ну, это аргумент, конечно.
Потому что изначально там стояло 4 Гб, а я добавил ещё одну планку на 4 Гб.
кодворс мб
Ребят, у меня задача сделать логаут, когда юзер нихуя не делает. Я почему-то думал, что это должно быть что-то сложное, а в итоге написал задачу за час.
Подскажите, есть ли реализации лучше и почему моя может быть говном?
Написал промисификацию readBook через асинхронный createReadStream. И вот теперь не знаю, как сделать ее синхронным. А это один из кусочков условия по расширению, и переписывать все из-за промиса не хочется.
[code]
let byExtension = function (filePath) {
var ext = path.extname(filePath);
if (ext === '.json') {
return JSON.parse(fs.readFileSync(filePath));
}
else {
return readBook(filePath).then(function (value) { return value });
};
};
console.log(byExtension('./example1.xlsx'));
[/code]
вчера
По-хорошему разлогинивать надо на сервере. Разлогин по таймауту - это так-то для безопасности придумано, а в твоем случае если кто-то таки угонит сессию, то он совершенно точно позаботится над тем, чтобы твой клиентский код по разлогину не сработает.
Ну и
>mousemove
>scroll
ты хоть debounce на это дело повесь.
Квериселектор просто отбирает элемент по селектору. У меня уже отобраны элементы и нужно найти xpath между ними.
>debounce
От маузмува лисенеры же все равно будут лисенить, запросов будет столько же, и одно присвоение переменной дела не сделает, разве нет?
Ебать меня залепило на кодворсе. Чому я раньше его не юзал. Спасибо.
Сделал, как ты сказал, вышло круто!
Условие задачи:
Return the lowest index at which a value (second argument) should be inserted into an array (first argument) once it has been sorted. The returned value should be a number.
For example, getIndexToIns([1,2,3,4], 1.5) should return 1 because it is greater than 1 (index 0), but less than 2 (index 1).
Likewise, getIndexToIns([20,3,5], 19) should return 2 because once the array has been sorted it will look like [3,5,20] and 19 is less than 20 (index 2) and greater than 5 (index 1).
Как отсортировать массив - я узнал сразу - для этого уже есть встроенный метод sort. Но как сравнить элементы и найти приближенное число? Чёт не пойму.
https://codepen.io/anon/pen/EROKMw
спасибо.
Для маленьких проектов подходит тот "фреймворк", у которого больше комьюнити.
Вкатываясь в новый проект на реакте, в первую очередь ты получаешь готовые свистелки-пердерлки с гита на все случае в жизни, а на Vue тебе придется стать инжинером велосипедостроителем
Начни с того, что подумай о жизни
Тем ли ты вообще занимаешься?
Динамическая типизация - это манна небесная, это клиллер фича JS'а
ха ха ебать я чёрт. спасибо братуха
https://codepen.io/anon/pen/PaVOxM
спасибо.
отбой
Нужно все парсить все изображения из определенной директории , собирая их url , размеры и тд .
В целом просто нужно выводить изображения из папки в DOM
Вы видите копию треда, сохраненную 26 августа 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.