• Grapqhl backend и React native app. Стоит-ли объединять?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Нормально вам тимлид говорит, если сделать это грамотно. Single Source Of Truth рулит.

    - разные проекты вполне могут оставаться разными проектами используя один и тот же общий для обоих код. Способов это сделать много. монорепа, модуль, реестр схемы например.
    - у вас уже взаимная зависимость - общий GraphQL API. Вы вряд ли сможете поменять схему в одном проекте и оставить её старой в другом. Возможность хранить схему отдельно и менять независимо - это не гибкость, это прямая дорога к тоннам проблем и куче потерянного времени. Вас не смущает то что каждый раз меняя схему в одном месте надо обязательно сходить и поменять ее в другом чтобы они были всегда синхронизированы, и если вы этого не сделаете/забудете/опечатаетесь/не так скопипастите то что-то где-то обязательно сломается? Именно в этот момент стоило бы почувствовать что-то неладное.
    - если вы не видели чего-то - это не значит что то, чего вы не видели плохо, а то что видели - хорошо.

    В общем, делать стоит - главное делать грамотно. Если вы сейчас весь код в одну кучу свалите то конечно ничего хорошего не выйдет.
    Ответ написан
    Комментировать
  • Как проверять есть ли в ответе значение?

    hzzzzl
    @hzzzzl
    res = 'There are 2/20 players online:Qwennnn, trufu7'
    res.includes('Qwennnn')  // true | false
    Ответ написан
    Комментировать
  • Как лучше добавлять новые элементы на страницу через js?

    alex-1917
    @alex-1917
    Если ответ помог, отметь решением
    ВСЕГДА тащи из БД ровно столько,сколько нужно показать.

    Сразу нужно показать 20, остальное нажимая кнопки "Показать", "Скрыть".

    вот это вот событие может и не наступить, скроллят товары 15%-34% покупашек, учись гуглить...
    Ответ написан
    2 комментария
  • Как лучше добавлять новые элементы на страницу через js?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Когда бэкенд хорошо работает, пользователь не способен заметить ajax-запрос. В крайнем случае спокойно отнесётся к секундному появлению спинера. Так что нет, в третьем варианте страница не замедлится. Зато она замедлится в первых двух случаях, если у вас в базе станет не 200 элементов, а хотя бы 2000, не говоря уж о 20 миллиардах. А ещё веселее то, что такая выборка из базы может колом поставить вообще всех пользователей.
    Ответ написан
    Комментировать
  • Как деструктуризовать массив как мне надо?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    var result = {};
    asset.customAttributes.forEach((el) => result[el.attrId] = el.value)
    Ответ написан
    Комментировать
  • Стоит ли переходить с var на let и const?

    b0nn1e
    @b0nn1e
    Alcohol & Ruby on Rails
    ИМХО быстрее было бы бы зайти и почитать https://learn.javascript.ru/let-const чем создавать вопрос.
    Ответ написан
    Комментировать
  • Как отследить изменение state?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Лучше вообще не хранить результирующие поля, а считать значения по факту.
    Ответ написан
  • Как правильно вернуть Promise в Javascript?

    mtix
    @mtix
    Front-end developer
    По моему мнению нужно использовать первый вариант.
    Вся суть Promise, что с начального состояния мы можем перейти в состояние
    * выполнено (fulfilled): операция завершена успешно.
    * отклонено (rejected): операция завершена с ошибкой.

    по логике, если возникла ошибка при асинхронной операции, то мы должны сделать reject(errors) и в дальнейшем обработать исключение в catch().

    Второй вариант может неправильно отработать в цепочке Promise.all(iterable), когда нужен явно выполненный результат несколько Promise.
    Ответ написан
    Комментировать
  • В чем ошибка (редактор сообщает о Syntax error.)?

    Stalker_RED
    @Stalker_RED
    Дык редактор правильно все указал, ошибка в синтаксисе for.
    Открой документацию или учебник про for и прочти.
    https://developer.mozilla.org/ru/docs/Web/JavaScri...
    Ответ написан
    Комментировать
  • Как взять часть строки на js?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    /\/(\d+)$/
    5cbdaae5bacb8923457286.png
    Ответ написан
    Комментировать
  • В чем смысл быть гуру тостера?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    1. Работа над личным брендом: Высокая репутация в профессиональных сообществах повышает привлекательность для нанимателей.
    2. Улучшение существующих знаний: Хочешь что-то понять, объясни другому.
    3. Приобретение новых знаний: Специализация замыкает в узком спектре задач и проблем, а Q&A-сервисы - это источник задач и проблем из самых разных областей и иногда под самыми неожиданными углами.
    4. Альтруизм: Большинству из нас кто-то помогал в начале пути, пришло время возвращать долг и делать свой скромный вклад в рост кадров.

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

    Для чего просиживаете на тостере по 5-6 часов в день?

    Я в среднем раз в полчаса-час заглядываю. Если находится интересный вопрос, могу потратить на него минут 10. Некоторые на перекуры больше времени тратят.
    Ответ написан
    7 комментариев
  • Лучше разобраться с cron или силами одного PHP?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Ваш план, простите, говно. Либо крон, либо храните в базе дату и время действия скидки и проверяйте ее оттуда
    Ответ написан
    Комментировать
  • Что значит "--" флаг во многих git операциях?

    Lynn
    @Lynn
    nginx, js, css
    По довольно распространённому соглашению, все параметры после двойной черты считаются позиционными (чаще всего это имена файлов). git придерживается этого соглашения.

    Например кто-то случайно создал файл с именем -n, а вы хотите вывести все файлы в папке командой cat
    $ ls -l
    total 8
    -rw-rw-r-- 1 lynn lynn 6 Apr 19 12:34 file1
    -rw-rw-r-- 1 lynn lynn 6 Apr 19 12:33 -n

    если просто выполнить cat *, то получится странное:
     $ cat *
         1	file1

    потому что bash раскрыл звёздочку и получилась команда can file1 -n, т.е. вывести файл file1 с нумерацией строк.
    А вот так всё выведется правильно:
    $ cat -- *
    file1
    a
    b
    c

    Потому что раскроется в cat -- file1 -n, но по соглашению, после -- не может быть ключей команды, только имена файлов.

    Конкретно в git есть ещё более строгое соглашение, по которому параметры после -- могут быть только путями.
    Например если у вас есть файл test и ветка test, то будет так:
    $ git branch 
    * master
      test
    
    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
    	modified:   test
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    $ git reset test
    fatal: ambiguous argument 'test': both revision and filename
    Use '--' to separate paths from revisions, like this:
    'git <command> [<revision>...] -- [<file>...]'
    
    $ git reset -- test
    Unstaged changes after reset:
    M	test
    Ответ написан
    Комментировать
  • Как исправить breadcumbs?

    @vardoLP
    Ват ю сэй эбаут май мама?!
    Ваша проблема в плохой верстке. Исправьте наложение логотипа на крошки и все будет нормально.

    5cb9ac3f4228e223940901.png
    Ответ написан
    Комментировать
  • Какие шаблоны проектирования js применяются на практике чаще всего?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    какие паттерны применяются чаще всего на практике и где

    Сразу отмечу, что все это чисто мое имхо, которое может не совпадать с мнением окружающих. В контексте фронтенда обычно все довольно просто. По моим наблюдениям в среднем сайте могут иметь смысл:
    1. Модули (делим код на независимые части)
    2. Фабрики (для компонентов интерфейса)
    3. Синглтоны (для хранилищ, точек сбора полифиллов / утилит и.т.д.)
    4. Адаптеры (для зависимостей и полифилов, которые могут измениться / выпилиться)
    5. Наблюдатели (для сбора происходящих событий в одном месте)
    6. Хранители (для сохранения действий пользователя и "Ctrl-Z")
    7. Стратегии (если действуем в зависимости от прилетевших данных)

    Другим паттернам применение вижу редко, только если под какую-то замороченную бизнес-логику. Хотя кого я обманываю, на среднем сайте обычно происходит только один паттерн - доширак из костылей. Ну и стоит сказать, что SPA-фреймворки имеют свойство навязывать свои подходы к решению задач, но это отдельная тема.

    Важно понимать, что паттерны проектирования - это просто хорошие идеи по поводу того, как организовать большой объем кода в той или иной ситуации. Это не "изучи тайное знание, запомни, и делай так всегда", не "используй паттерны, потому что великие их используют", это скорее "если не уверен как организовать код, возьми готовую идею, она вроде работает". Если вы будете просто решать задачи, то через N лет практики вы сами их все "изобретете", только не будете знать, что у них есть названия. Эффективно будет организовать себе заметку о том, какие из этих идей для чего примерно применяют, а потом, в процессе работы, в нее подглядывать, если встал вопрос "как организовать этот код".
    Ответ написан
    7 комментариев
  • Кто сталкивался с версткой такого типа макета?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Забудьте... дизайнер просто демон... посылайте нафиг дизайнера...

    О да, люблю эти комментарии. Набросал тут небольшой прототип:


    В браузерах особо не проверял, только Chrome и FF, но вроде в современных должно работать.
    Ответ написан
    6 комментариев
  • Как связать frontend c backend-ом, backend с внешним медленным сервисом для возможности параллельной обработки множества запросов?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Вы намешали все в кучу. Разберем по полочкам:
    1. вы не сказали что у вас за фронтэнд. Обычный JS, полагаю?
    2. Никакой фронтэнд не однопоточный, если только вы сами так не сделали
    3. Микросервисная архитектура это хорошо, делайте, но к вашей задаче не относится никак
    4. Для распараллеливания на бэкэнде для вашей задачи познакомьтесь с Message Broker: RabbitMQ или Kafka, например
    Ответ написан
    3 комментария
  • Можете оценить уровень кода?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Навскидку:
    1. В проектах по-хорошему использовать типизацию TypeScript, Flow. PropTypes в таком случае использовать не надо.

    2. Тут в коде бессмысленное условие:
    render() {
        const { report = {} } = this.props;
        return (
          <Fragment>
            <Head>
              <title>Doctor problem with {report.doctor.name}</title>
            </Head>
            {report && <ReportDetail showDetailButton={false} data={report} />}
          </Fragment>
        );
      }

    report у вас существует всегда. Надеюсь понимаете, что пустой объект кастуется в true.

    3. Про ESLint/TSLint уже писали.

    4. Ваши редьюсеры не имеют ключей состояния. Какой-то запрос может быть в процессе, а ваши компоненты об этом не знают.

    5. Логику работы с куками лучше вынести в actions.

    6. Нет смысла разделять импорты отступами, просто соблюдайте очередность и смотрите пункт 3.

    7. Компонент __app можно декомпозировать.

    8. Неясно зачем тут геттер
    get renderReports() { /* ... */ }

    9. Для сортировки можно использовать меморизацию.

    10.
    handleChange = (e, key) => {
        const value = e.target.value;
        this.setState({
          [key]: value,
        });
      };

    <Input
      id="outlined-name" //  зачем?
      placeholder="Problem Summary"
      value={reportTitle}
      onChange={e => handleChange(e, "reportTitle")}
    />

    Можно заменить на:
    handleChange = e => {
        const { name, value } = e.target;
        this.setState({
          [name]: value,
        });
      };

    <Input
      id="outlined-name" //  зачем?
      placeholder="Problem Summary"
      name="reportTitle"
      value={reportTitle}
      onChange={handleChange}
    />


    11. /components/ReportDetail/constants.js зачем?

    12. Где-то запросы в экшенах, где-то в компонентах.

    Не знаком с next.js поэтому ничего объективного по организации кода сказать не могу, так как не до конца понимаю как этот фреймворк работает. Вижу, что авторизованных запросов пока нет. Запросы к API у вас будут происходить только на стороне клиента?
    Ответ написан
    Комментировать
  • Можете оценить уровень кода?

    @curious-101
    Frontend developer
    Пробежался очень быстро аки гепард, так что вот, что бросилось в глаза:
    1. Раз уж используете prop-types, то используйте их для всех компонентов, а ещё лучше в линтере это правило
      пропишите

    2. Инлайновые стили надо переписать с помощью styled-components. Таких мест много кстати.

    3. Зачем этот файл тут? классы отлично себя чувствуют в styled-components.

    4. Неиспользуемый код. Тож линтер должен ругаться. Кстати плагин Eslint в IDE подключен?

    5. В одних местах Fragment, в других <>, имхо лучше выработать единую стилистику.

    6. вот тут и тут, возможно ещё где-нибудь, при рендере сработает экшен, оно надо?


    Зачем вам фриланс? Вам бы поднаточить навыки на хороших проектах, посмотреть архитектурные решения и если очень повезёт чистый код "старших" товарищей.
    Ответ написан
    Комментировать
  • Как создать новый массив на основе вложенного массива объектов?

    rockon404
    @rockon404
    Frontend Developer
    function mapData(data) {
      return data.map((el) => {
        const override = {
          newProp: 'value',
        };
      
        if (el.children) {
          override.children = mapData(el.children);
        }
      
        return { ...el, ...override };
      });
    }
    Ответ написан
    Комментировать