• Как вернуть Main menu в PhpStorm?

    OlegOleg1980
    @OlegOleg1980 Автор вопроса
    программист
    Решил через Find Action: Ctrl+Shift+A -> вводим в поиск View -> и далее открывается меню.

    5e3569a5ca32f455581814.jpeg
    Ответ написан
    1 комментарий
  • Как во Flow использовать дженерики внутри объекта React компонента?

    0xD34F
    @0xD34F
    state: State<T> = {
      selectedItems: []
    }
    
    renderListItem: ({ item: T }) => T = ({ item }) => {
      return item;
    }
    Ответ написан
    2 комментария
  • Как перестать говнокодить и принимать неверные архитектурные решения?

    miraage
    @miraage
    Старый прогер
    как писать поддерживаемый код?

    Если уж очень коротко, то соблюдать SOLID/GRASP. Мне понравился твит одного из авторов React Router:
    https://twitter.com/mjackson/status/1171524189850701825

    Most common mistake software developers make: putting stuff in the wrong place. Coupling responsibilities and concepts that should be kept separate.
    For me, this is 95% of software development. Just figuring out *where* things belong.


    Что гуглить, что учить?

    Фундаментальные знания, вроде вышеупомянутых SOLID/GRASP, паттерны (не только классические паттерны, но и вообще, общеизвестные решения определённых задач), базовые структуры данных. Фреймворки/библиотеки всегда будут приходить/уходить, что-то будет забываться. А фундаментальные знания всегда актуальны.

    Может литературу какую почитать посоветуете?

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

    Можно ли себя называть миддлом, если твой код говно?

    Не пытайтесь себя оценить. В каждой компании свои понятия миддла. А если кто-то 35 лет на лиспе кодил, а потом прыгнет на Angular - кто он, джун или сеньор?
    И, да, все мы в какой-то степени пишем говнокод. Если кто-то Вам доказывает, что он пишет супер чистый код - не слушайте.

    И ответ на главный вопрос.
    Как перестать говнокодить и принимать неверные архитектурные решения?

    Это невозможно. Все проекты, которые чуток сложнее CRUD-ов, рано или поздно обрастают говнокодом. Никто не пишет идеальный код. Код должен работать и решать проблемы бизнеса.
    Ответ написан
    5 комментариев
  • Flow: почему ругается на необязательное свойство в объекте?

    @i1yas
    Тоже часто сталкивался с этой "проблемой". Фишка в том, что flow рассматривает самые худшие сценарии.
    Вот ответ на SO
    Такой тип позволяет сделать такую штуку:
    function map(items: Array<Item>) {
      ...
      items.push({name: "Vasya"});
      ...
    }
    map(list)

    Пушим объект типа Items, локально все ок, только мы его пушим в массив типа Array<Users>, у которого более строгий тип. Поэтому флоу ругается.
    Решение:
    function map<T: {name: string}>(items: Array<T>) {
    Ответ написан
    Комментировать
  • Flow: почему Type Aliases не работают в аргументе функции?

    @i1yas

    Вызываю где-то в коде без аргументов и все ок, Flow не видит проблем
    api.addBlogPost()

    Не может быть, будет ругаться в обоих случаях. Вот
    Может где-то // @flow забыли
    Ответ написан
    2 комментария
  • Redux и MobX - плюсы и минусы, когда лучше что использовать?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Сразу скажу - не использовал MobX, но если вы читаете дальше - значит интересуетесь.
    Ответ про плюсы redux для меня лично - в самом конце.
    ---
    До React, писал на angular, и еще раньше на backbone. В ангуляр разработке у меня были места, которые я для себя объяснял: ок, так работает ангуляр (дайджест там, скоуп такой хитрый и т.д.) - факт был в том, что не все было прозрачно для меня лично.

    Начал разбираться с React и переписал часть рабочего проекта на React + Flux. В целом понравилось, но немного напрягало копирование однотипного кода. Появился redux, который (это важно) решил мою проблему. Все, тут я сделал остановку. Написал еще пару внутренних проектов - понравилось. Меня не напрягает ничего. Все уместно, код читается хорошо. Если я возвращаюсь к старому проекту - я очень быстро вникаю в "как это работает" и могу приступить к решению задачи.

    В процессе работы с Redux - появился Graph QL. Клево! Опять что-то новенькое - начал разбираться, и закрыл - так как быстро въехать не получилось, и попутно мне пришла простая мысль: зачем? Меня устраивает то, как работает связка React + Redux. Поэтому, я не стал вникать в saga, и пока что не хочется вникать в MobX. Возможно, это не правильно, ведь я их даже не смотрел, но свободное время от "вникания в новую технологию" я потратил на "дебри" технологий, которые активно использую.

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

    Главные плюсы redux для меня:
    + Если не трогал проект больше месяца - очень легко вспомнить что к чему.
    + Я пишу код. Я не вникаю в новое, я наращиваю знания по "старому" => я пишу быстро
    + Удобно тестировать

    Когда использовать:
    - когда хотите сделать одностраничное (SPA) приложение с нуля
    - когда хотите постепенно перевести старый проект на схему: вьюха (вся страница, или какой-то блок) + API запросы
    Ответ написан
    2 комментария
  • Что будет с PHPStorm после окончание подписки?

    Rampages
    @Rampages
    Бывает, что на карте, которая привязана к подписке нету денег на момент списания, в таком случае приходит письмо от JetBrains Team содержащее:
    Dear Roman,
    This is a friendly reminder that the next payment date for your subscription is approaching on April 01, 2017.

    We hope you enjoy using JetBrains products and will consider renewing your subscription: renew online.

    The subscription requiring payment include:
    1 × All Products Pack
    What happens if I don't renew?

    Yours truly,
    JetBrains Sales Team
    https://www.jetbrains.com
    The Drive to Develop

    Ссылку на renew online. потёр, ибо она ведёт на мой checkout.

    А вот если нажать на "Что будет если я не буду продлевать?", то вас бросит на страницу: What is perpetual fallback license?, где подробно с картинками и примерами показано, как будет вести себя лицензия:
    .
    .
    1. Если подписка была сроком, менее 1 года.Less_than_year.png
    ########################################################################################################################################################################################
    .
    .
    2. Если подписка была сроком ровно на 1 год.One_year.png
    ########################################################################################################################################################################################
    .
    .
    3. Если подписка была сроком более 1 год.More_than_year.png
    ########################################################################################################################################################################################
    .
    .
    4. Если подписка была сроком на 1 год и вы продлевали её подпиской на несколько месяцев.Year_and_a_months.png
    Ответ написан
    Комментировать
  • Почему на работает анимация GSAP в React-компоненте?

    @kulaeff
    Front-end developer
    Нужно подключить еще также и CSSPlugin. Либо вместо TweenLite использовать TweenMax, который уже его включает.
    Ответ написан
    Комментировать
  • Реально ли зарабатывать с использованием Blender 3D?

    cronk
    @cronk
    Делаю графику для кино. Роботы, взрывы, пиу-пиу!
    Зарабатывать - реально.

    Тут, скорее, важно, чем хочешь заниматься. Архитектурная визуализация, кино, реклама, игры по запросам различаются довольно сильно.

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

    Если хочется кино - то тут несколько сложнее, ибо над каждым шотом (планом) может работать несколько человек. Но даже в кино часто требуется простой трехмер. Сложные шоты, на которые может не хватить Блендера, как правило, на фриланс не отдают.

    Если работать в студии, где работают в Максе/Майке/Синеме, то выучить кнопочки - это пару недель. Плюс, всегда рядом будут люди, которые подскажут, куда тыкать. А базовые знания, как работать с трехмером, Блендер дает запросто. Еще у Блендера есть огромный плюс - он всегда лицензионный. Т.е. можно прийти работать в студию и сказать - я не знаю, как это сделать в Максе/Майке/Синеме, зато знаю как в Блендере. Поставить Блендер и работать. С другими пакетами такое может не прокатить.
    Ответ написан
    1 комментарий
  • Самостоятельное создание интернет-магазина с привязкой к 1С с нуля- что нужно знать/уметь?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Примерный (неполный) список:
    1. Знать как создать интернет-магазин.
    2. Уметь это делать (самостоятельно).
    3. Знать как связать интернет-магазин и 1С.
    4. Уметь это делать (самостоятельно).


    Простите за сарказм, но иного ответа на ваш вопрос дать невозможно. На то, чтобы сделать магазин с нуля, придётся потратить месяцы (а кому-то и годы) на обучение. И начинать его нужно с основ (которые очень легко гуглятся).
    Ответ написан
    Комментировать
  • На каком языке писать комментарии для проекта?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если знаете английский, то пишите комментарии на английском. В конце концов вы пишете их, прежде всего, для себя. А остальные пусть мучаются. Сами виноваты, что не знают английский.

    К слову, очень много документации на английском. Так что если его не знать хотя бы на базовом уровне, то человек практически инвалид в сфере ИТ. Не ясно, зачем команде такие люди.
    Ответ написан
    Комментировать
  • Почему на Apple устройствах не работает клик и показались блоки, которые скрыты?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    В режиме телепата, могу предположить что у вас при подключении CSS/JS файлов где-то регистр названий файлов не соответствует тому как они подключены.

    В openserver это все работало, т.к регистр файлов в windows не учитывается.
    На хостинге *nix - и там все наоборот.

    Изучите сайт с включенной консолью в хроме, скорее всего при попытке загрузки какого-нибудь файла 404.
    Ответ написан
    2 комментария
  • Как передать ref компоненту из функции возвращающее jsx?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Сказать, что подход к реализации плохой ничего не сказать. Посмотрите код типового TodoApp и получше изучите документацию.

    почитав документацию, я понял что рефы работают только в "классах", и поэтому происодит ошика

    Видимо, по-диагонали читали. Нет ref работает не только в "классах".

    Прочитайте про иммутабельность и про способы привязки метода к контексту. В документации это все есть.

    Ошибка:'refInput' of undefined говорит лишь о том, что в вашем рабочем коде метод не привязан к контексту.
    Ответ написан
    Комментировать
  • Стоит ли переходить на React.PureComponent по-умолчанию?

    PQR
    @PQR
    React.PureComponent реализует метод shouldComponentUpdate таким образом, что он делает поверхностное сравнение props и state (не глубокое). Вот собственно код:
    https://github.com/facebook/react/blob/c8fbdac2271...
    shouldUpdate =
                !shallowEqual(prevProps, nextProps) ||
                !shallowEqual(inst.state, nextState);


    Что такое shallowEqual? Это по сути сравнение оператором === каждого элемента из prevProps с каждым элементом из nextProps. На всякий случай дам ссылку на реализацию для полного понимания: https://github.com/facebook/react/blob/6963ea4bfcd...

    В итоге всё зависит от структуры ваших props. Если в props вы передаёте объекты которые иногда мутируются, т.е. по ссылке они равны ===, но внутри какие-то данные поменялись (что само по себе выглядит странно в экосистеме redux + reselect, но вполне возможно технически), тогда использование PureComponent вам всё поломает, т.к. на экране какие-то компоненты перестанут перересовываться!

    Если же у вас всё по уму, данные которые передаются через props являются скалярными типами (string, int, float, bool) или immutable объектами, тогда смело используйте PureComponent - в некоторых случаях он поможет избавиться от лишних вызовов render.

    Важное замечание: PureComponent нужно использовать только для так называемых presentational components, т.е. для тех компонент, которые НЕ обёрнуты в вызов redux connect().

    Для container components (т.е. тех компонент, которые обёрнуты в redux connect()) нет смысла наследоваться от PureComponent, т.к. метод connect() оборачивает ваш компонент своей реализацией shouldComponentUpdate, которая также использует shallowEqual. Если вы по недосмотру унаследуете container component от PureComponent - ошибок не будет, но это не имеет никакого смыла, т.к. ваш код по сути будет дважды делать shallowEqual, а зачем делать лишнюю работу?

    Подводя итог, рецепт такой:
    - presentational components наследуем от React.PureComponent
    - container components (которые обёрнуты в redux connect()) наследуем от старого доброго React.Component
    Ответ написан
    1 комментарий
  • Return: React Component: будет ли утечка памяти?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Бесполезный велосипед изобретаете.

    Вариант 1. Если используете redux-thunk:
    export const handleError = error => ({ type: 'NEW_ERROR', payload: error });
    export const doSomething = data => ({ type: 'DO_SOMETHING', payload: data });

    import { apiCall } from './api';
    import { handleError, doSomething } from './actionCreators';
    
    export const asyncAction = () => dispatch => {
      try {
        const result = await apiCall();
        dispatch(doSomething(result));
        
        return result;
      } catch (e) {
        dispatch(hanldeError(e));
      }
    };

    аналогичным образом можно использовать блок catch если используете redux-saga.
    Если еще не используете, одно из этих middleware, то рекомендую скорей познакомиться с ними и начать использовать.

    Вариант 2. Если не используете:
    export const handleError = error => ({ type: 'NEW_ERROR', payload: error });
    export const doSomething = data => ({ type: 'DO_SOMETHING', payload: data });

    import { connect } from 'react-redux';
    import { apiCall } from './api';
    import { handleError, doSomething } from './actionCreators';
    
    class ExampleComponent extends React.Component {
      componentDidMount() {
        const { dispatch } = this.props;
    
        apiCall().then(
          res => dispatch(doSomething(res)),
          err => dispatch(handleError(err)),
        );
      }
      
      render() { /* ... */ }
    }
    
    export default connect()(ExampleComponent);

    или:
    import { connect } from 'react-redux';
    import { apiCall } from './api';
    import { handleError, doSomething } from './actionCreators';
    
    class ExampleComponent extends React.Component {
      componentDidMount() {
        const { doSomething, handleError } = this.props;
    
        apiCall().then(
          res => doSomething(res),
          err => handleError(err),
        );
      }
      
      render() { /* ... */ }
    }
    
    mapDispatchToProps = {
      handleError,
      doSomething,
    };
    
    export default connect(null, mapDispatchToProps)(ExampleComponent);


    Вообще, самый простой способ сделать dispatch в store это:
    store.dispatch(someAction());

    Прежде чем начнете изобретать очередной велосипед, настоятельно рекомендую хорошо изучить документацию react, redux и react-redux.
    Ответ написан
    1 комментарий
  • Нужен ли вообще этот server side rendering?

    Серверный рендеринг нужен чтобы:
    1. Пользователь получил уже отрендеренный интерфейс, вроде как быстрее, приятнее и т.д. - на мой взгляд такое себе преимущество
    2. Для индексации поисковиками - главное и основное

    Рендерьте на сервере те компоненты, индексация которых важна. Всякие ГуглоКарты, корзины интернет-магазинов и прочее рендерить не надо.
    Не надо индексироваться - не мучайте ни себя, ни Тостер.
    Ответ написан
    3 комментария
  • Как правильно передать JSON в компонент vue js?

    @deliro
    Агрессивное программирование
    computed сделай

    И вообще, в props и data не должно быть атрибутов с одним именем
    Ответ написан
    1 комментарий
  • Как заставить работодателя своевременно отчитываться о причинах отказа в приеме на работу?

    Maksclub
    @Maksclub Куратор тега Карьера в IT
    maksfedorov.ru
    Никто вам ничего не должен, даже если вам очень сильно это не нравится!

    То, что это есть в законе — ерунда (как и запрет указания пола даже для вакансии грузчика)... глупый закон... очень легко его обойти с поводом "а мы еще думаем то есть не отказ это, просто рассматриваем всегда так",...
    или может они вообще не видели ваш отклик (даже если в системе есть метка "просмотрено" — это не может являться доказателсьвом просмотра компетентным человеком или именно той компанией, которая может ответить перед законом, тк не всегда есть приказ об ответственности от гендиректора — грубо говоря без ведома компании сотрудник HR может опубликовать вансию...) крч, не парьте мозг себе на ровном месте, займитесь делом!


    Способы обойти хитрых:
    • внешним HR — типа консультатнт, который присматрвает кандидатов...
    • или приписка — "вакансия не актуальная, но вы можете написать в запас",
    • или приписка "не является офертой",
    • или вообще не давать вакансии, а смотреть по резюме
    • или подставная компания в hh.ru (самый простой способ)
    • или написать бота, который автоматом будет писать письма "счастья"

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

    Если хотите привлечь к ответственности — отправляйте письмо с уведомлением на юрадрес компании!
    Посторонние сервисы (типа hh.ru и прочее — фуфло в плане юридической ответственности)

    upd: Если по АПИ собирать отклики на вакансию на hh.ru, то не отмечается резюме просмотренным
    Ответ написан
    6 комментариев
  • Как MongoDB будет хранить модель, вложенную в другую модель?

    longclaps
    @longclaps
    MongoDB будет хранить модель никак. Эта хрень - на совести авторов mongoose.
    MongoDB будет хранить документы.
    Это важно.
    MongoDB - безсхемная БД.
    Она никак не поддерживает ссылочную целостность - всё только руками.
    Поле User.Role будет копией.
    Ответ написан
    2 комментария
  • Почему я не могу вызвать функцию из другого файла .js?

    @ThemeZ
    Js developer (React.js)
    Что здесь вообще происходит.. зачем React и JQuery вместе?
    Ответ написан
    3 комментария