• Отступ при ресайзе?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    jsfiddle.net/atq3L4yr/5
    Дальше дорабатывайте сами до нужной кондиции )
    Ответ написан
    4 комментария
  • Отступ при ресайзе?

    @al3ch5
    Как то так.
    Ответ написан
    Комментировать
  • React + Redux, как начать правильно?

    Довольно годный материал начните с этого...
    Ответ написан
    Комментировать
  • React + Redux, как начать правильно?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Как с этим работать, чтобы не сойти с ума?

    Не торопиться, если хочется вдумчиво разобраться =)

    Первая проблема, как принять данные?

    Использовать react lifecycle hooks: в момент componentDidMount (или в componentWillMount) вызвать actionCreator (AC = создатель действия) -> в AC вы генерируете событие с типом REQUEST (которое ловит ваш редьюсер), а затем производите "ajax запрос", скажем так. В случае удачного результата - генерируете событие SUCCESS и ваш редьюсер устанавливает данные. Далее, ваш компонент формы, видит, что есть новые "props" (свойства, которые изменились в редьюсере, о которых компонент узнал, так как он приконекчен с помощью функции "connect" из библиотеки react-redux) и запускается перерендер. Вуаля, после такой кучи действий ваша форма "приняла данные".

    Конечно, если просто сделать нативный xhr запрос, кода будет гораздо меньше и все в одном файле, но это уже нужно исходить из ваших пожеланий. Если вам нужно, чтобы данные были "прогнаны" через редьюсер и оказались в store, значит "много действий". Если не нужно - просто обычный xhr запрос, либо если угодно $.ajax и установка данных в state компонента.

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


    Если используется redux, то цепочка следующая: на onChange селекта вызывается обработчик, то есть функция в вашем компоненте, которая вызывает AC (создатель действия, который располагается в папке actions). Далее уходит запрос на сервер. Затем с сервера приходит успешный ответ - вы генерируете событие, типа "DATA_RESPONSE_SUCCESS" и ваш редьюсер его "ловит". Итак, вы оказываетесь в третьем файле - в файле с редьюсером. Там вы манипулируете данными, так как вместе с типом события, вы так же должны были передать из action'а и данные, которые пришли с сервера. После того, как вы установите новые данные в редьюсере - начинается магия (которая заключается в том, что ваш компонент слушает изменения в объекте стора, с помощью функции connect). Ваш компонент перерендеривается и в инпуте оказываются нужные данные, так как инпут в качестве value использует, например: this.props.myNewValueFromServerAfterSelectManipulation (имя переменной, конечно, шуточное).

    Итого: вы потрогали файл компонента, файл из папки actions и файл из папки reducers.

    Супер итого:
    1) вам нужно понять, как сделать форму без redux. Как в ней с помощью this.state и методов жизненого цикла устанавливать и изменять данные в зависимости от того, что выбрал/ввел пользователь. Сделать это не сложно, если начать с туториала на официальной странице, либо заглянуть в РУ туториал здесь.

    2) вам нужно понять, почему в actions располагаются асинхронные запросы, и как при этом работает redux-thunk (а так же middlewares в общем). Почему в reducers производится только изменение данных. И самое главное, почему компонент при этом перерисовывается. Опять же, ссылки на официальные руководства уже дали. Русский перевод там не закончен, поэтому, хоть и устаревают версии библиотек, этот туториал по редуксу до сих пор актуален.

    P.S. в туториалах есть примеры с кодом
    Ответ написан
    3 комментария
  • React + Redux, как начать правильно?

    @titronfan
    https://rajdee.gitbooks.io/redux-in-russian/content/ - официальная документация на русском языке
    https://github.com/reactjs/redux/tree/master/examples - официальные примеры
    За пример с ajax из примеров можно взять папку "async". Посмотрите как там работает ajax.
    Для того, чтобы слать асинхронные запросы (ajax) сейчас сделаны специальные миддлвэры - к примеру thunk middleware. Ajax запросы там отсылаются через нативную функцию в js-e "fetch".

    Также гляньте эти посты: bogdanov-blog.ru/category/javascript/react-javascript
    Ответ написан
    Комментировать
  • Как быть, если задерживают оплату на месяц?

    Sanes
    @Sanes
    В договоре должен быть пункт регулирующий такие ситуации. Если договора нет, то можете подождать или распоряжаться дизайном на своё усмотрение.
    Менеджер морозится. Попробуйте связаться непосредственно с заказчиком.
    Ответ написан
    31 комментарий
  • Удаленная работа с Европой/Америкой Ваш опыт?

    vicodin
    @vicodin
    Имею некоторый опыт
    Западные компании платят в 3-5-10 раз больше. В среднем US > EU.
    Начиная с уровня Junior, если знаешь английский язык.
    Особенности работы - клиенты более корректные и деловые, когда работаешь с ними, возникает скорее ощущение партнёрства, нежели иерархии.
    Ответ написан
    Комментировать
  • Как по клику заменить слово на другое и при повторном клике обратно?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    <div class="clickme">
    Нажми на меня!
    </div>

    $('.clickme').click(function(){
      if (!$(this).data('status')) {
        $(this).html('Молодец! А еще раз слабо?');
        $(this).data('status', true);
      }
      else {
        $(this).html('Ну ты гигант! А может еще раз?');
        $(this).data('status', false);
      }
    });

    https://jsfiddle.net/alekseynemiro/bu0zfgz4/
    Ответ написан
    1 комментарий
  • Тестовое задание (Junior Frontend), приемлемое ли?

    @spaceatmoon
    ИМХО, макет не слишком сложный, но т.к. он на 70% похож на настоящий, я не стал бы его делать. Люди которые пишут, что сделают за 4-5 часов лукавят.

    Я лично зарекся и делаю только абстрактные тестовые задания, которые не похожи на рабочую задачу. Это во первых и меня не обижает, что я возможно делаю чью-то задачу, да и еще и бесплатно. Оплатить кстати мне никто не согласился ни разу. И их не сильно напрягает, т.к. это довольно большой объем для код-ревью.

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

    Попросите менее объемное задание.
    Ответ написан
    1 комментарий
  • Тестовое задание (Junior Frontend), приемлемое ли?

    @kirill-93
    Вертел я такие задания при устройстве на работу.
    Однажды тоже устраиваясь в "крутую" контору прислали большое задание. Все выходные убил на него. Потом еще две недели мурыжили собеседованиями и в итоге не взяли.
    Я с тех пор никогда не соглашаюсь на тестовые задания, которые займут больше получаса моего времени.
    Объемные задания должны оплачиваться. Если они очень требовательно отбирают сотрудников, то сначала надо дать простое задание/прособеседовать и уже если человек их устраивает, давать объемное задание и платить.

    UPD
    Не слушайте, пожалуйста, бред об опыте и пользе для вас. Из таких "будущих хороших специалистов" потом веревки вьют, типа "поработай по вечерам, это ж опыт для тебя!" или "давай ты теперь и по субботам выходить будешь, а мы тебя за это серьёром называть будем!". Очень работает с наивными молодыми людьми.
    Вы поймите, что все эти разговоры про опыт и пользу для вас - это уловки с целью сэкономить и вас обмануть. Всем плевать на ваш опыт, им нужно денег меньше вам заплатить и все.
    Огромное тестовое задание - это неуважение к кандидаду.
    Давай представим обратную ситуацию: я прихожу к потенциальному работодателю и говорю: "Давайте я у вас тут недельку посижу без каких-либо обязательств, а вы мне зарплату платите. А потом посмотрим, может быть останусь, а может уйду". Нормально? Ситуация выглядит именно так, потому что работодатель не делает одолжения принимая на работу, он "покупает" ваше время и ваш опыт и все.
    Ответ написан
    13 комментариев
  • Объясните простыми словами как работает Redux?

    Laiff
    @Laiff
    Front-end developer
    Отличный мануал от самого Дани https://egghead.io/series/getting-started-with-redux
    Документация переведенная на русский https://github.com/rajdee/redux-in-russian там почти все есть.
    Есть еще приятная статья на хабре чисто по базовым принципам, но в некоторых местах не полная habrahabr.ru/post/269831
    Ответ написан
    3 комментария
  • Куда можно устроиться junior удаленно с таким стеком технологий?

    PlugIN
    @PlugIN
    A Little Programmer
    Доброго дня!

    Никакой критики, я только поддерживаю вас. И ниже три совета.

    1) Респект вам за решимость постигать программирование и фронтэнд в частности.
    2) Не слушайте тех, кто говорит о критичности работы в офисе для скорейшего проф. развития. Да, это основной вариант, если у человека плохо с самообучением, т.е. он просто не может собраться и сам изучать дисциплины, гуглить, яндексить, задавать вопросы на спец. ресурсах. Это явно не ваш случай. Поэтому, если брать во внимание отсутствие тяги к высокой массовой доли беспредметных разговоров в офисах, и желание оставаться собой, т.е. интровертом, все хорошо. В будущем, если захотите, и коммьюнити найдете и поспорить о технологиях сможете, и даже вещать, будучи каким-нибудь евангелистом ))
    3) Предлагаю такой роадмэп на ваше рассмотрение: у вас сейчас только один лэндинг, поэтому сделайте еще один-два хороших проекта для себя, создайте хороший сайт-портфолио, найдите в своем городе еще пару-тройку заказов на лэндинги/сайты-каталоги. Положите и их в портфолио. Тогда можно будет обновить резюме везде, в том числе и на hh.ru и на МоемКруге, в поле "О себе", кроме указания на высокую мотивированность, хорошо бы, если есть, упомянуть про свои смежные компетенции (дизайн интерфейса, психология, бэкэнд, математика и пр.). Кстати, на том же hh.ru вполне можно найти работу в удаленном формате для Junior. Есть довольно много небольших и неизбалованных контор, на которых "продвинутые ребята" не обращают внимания. И они просматривают отклики таких специалистов, как вы (т.е. как вы после вышеописанного). И этот путь недолгий, т.к. у вас уже есть, как понимаю, довольно много навыков.

    Удач! *___*
    Ответ написан
    12 комментариев
  • Как работает this jquery?

    @igor9alive
    $(this) в данном примере содержит элемент, на котором произошел click. Т.е. непосредственно элемент.
    То есть, вот этой строкой "$(this).slideToggle(1000);" ты скрываешь элемент, по которому кликнули - $('.bg_sale span').
    Напиши вот так - $(this).find('b').slideToggle(1000);
    Таким образом в элементе this (кликнутый элемент) ты найдешь все теги b и применишь к ним метод slideToggle
    Если ничего не упустил, должно сработать
    Ответ написан
    1 комментарий
  • Хочу очень научиться программировать на JS, с чего начать? что учить и как учить?

    Stalker_RED
    @Stalker_RED
    1. Научись гуглить.
    Нет, это не шутка, этот совет тебе еще не раз дадут, и будут правы. Попробуй просто написать "обучение javascript" или "javascript бесплатные курсы" или еще что-нибудь, прояви свою фантазию, не стесняйся!

    2. В долгосрочной перспективе выгоднее учить программирование вооще, а не именно на js. И вообще js в качестве первого языка довольно сомнительный выбор, хотя сейчас понабегут javascript-fullstack-senior-developers и будут это утверждение оспаривать.

    Если в гугл не получилось, то начни с learn.javascript.ru и mdn.

    Не помешает иногда заглядывать в карту развития веб-разработчика, и смотреть какие темы вы пропустили. Не обязательно их все учить "на пятерку", но хотябы общее представление неплохо бы иметь по каждому пункту.

    Возможно до всего этого придется подтянуть основы: как вообще эти копутеры работают, что там за сети и интернеты бывают, вот это все. Книжки Таненбаума довольно доходчиво все объясняют, не смотря на то, что они довольно древние. Основы не изменились, только добавилось кой-чего по мелочи. Читаются довольно легко. Если какие-то моменты совсем непонятные - пролистывайте, потом можно перечитать.
    Ответ написан
    Комментировать
  • Как написать большое приложение на Vue.js и не умереть?

    @ber_enot Автор вопроса
    Веб-разработчик, Vue.js / Node.js
    Спасибо всем ответившим!

    Нашел решение.
    Проблема была в конфигурации vue.config.js (использую vue-cli 3).

    Для глобальных переменных и миксинов SASS (SCSS) использовал плагин style-resources-loader.

    pluginOptions: {
        'style-resources-loader': {
          preProcessor: 'scss',
          patterns: [
            path.resolve(__dirname, 'src/scss/_variables.scss'),
            path.resolve(__dirname, 'src/scss/_mixins.scss'),
          ],
        }
      },


    Именно из-за него сборка занимала много времени. Изменение одной буквы в HTML-коде компонента приводило к пересборке всех компонентов, использующих SCSS.

    Решение проблемы:
    1. npm remove style-resources-loader
    2. удаление из конфига кода (см. выше)
    3. добавление в конфиг кода:
    css: {
        loaderOptions: {
          sass: {
            data: `
              @import "@/scss/_variables.scss";
              @import "@/scss/_mixins.scss";
            `,
          }
        }
      },


    Результат:
    DONE Compiled successfully in 1704ms 15:06:07
    App running at:
    - Local: localhost:8080
    Ответ написан
    Комментировать
  • Как быстро и эффективно прокачать скилы в верстке?

    @mletov
    Вы знаете, у нас в команде похожая ситуация. Нас 3 программиста, пишем в основном бэк, а к морде требования обычно минимальные, поэтому везде бутстрап. Из нас троих опыт работы верстальщиком в веб-студии есть только у меня, остальные как вы: вроде тоже не первый год работают, по верстке что-то правят, подгугливают, но как что-то чуть посложнее - спрашивают у меня.

    Курсы, книги, менторы и т д - это, конечно, хорошо.
    Но самая реальная польза - сверстайте из psd 3-5-10 макетов pixel perfect. И без всяких бутстрапов. После энного макета постигните дзен и все поймете. И чем макеты будут разнообразнее, чем больше в них адаптивности и хитрых элементов - тем лучше. По непонятным моментам спрашивайте на тостере. А так, судя по опыту коллег, иметь "некоторые представления о css" и подгугливать можно до бесконечности.
    Ответ написан
    1 комментарий
  • Реально в 36-40 лет стать тестировщиком или программистом если есть свободное время?

    Moskus
    @Moskus
    Реально, только есть тонкости.
    Во-первых, тестирование - как правило, самая "чёрная" и дешёвая работа в этой области.
    Во-вторых, программирование похоже на спорт: чем раньше начинаете, тем лучше результат. Это не значит, что у вас ничего не получится, просто многое может даваться с заметно большим трудом.
    В-третьих, стоит поинтересоваться, нет ли в уже знакомой вам области производства задач узкоспециализированного программирования. Как в машиностроении - программирование ЧПУ-станков или роботов, а также - автоматизация на PLC. Если вы научитесь чему-то такому, у вас будет преимущество опыта. А в каком-нибудь web вы будете ещё одним полным новичком из тысяч.
    Ответ написан
    2 комментария
  • Прокомментируете тестовое на react?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. Хотелось бы видеть в проекте использование redux. react+redux - это самый распространенный и востребованный стек в React разработке.

    2. Почему все хандлеры и состояния находятся в App, а не в Main? Как вы потом эту кашу собираетесь масштабировать? Переносите все, что связанно только с Main в Main. По-хорошему смотрите пункт 1.

    3. Слишком много функциональных компонентов. Подумайте их где можно заменить на классы с реализованным shouldComponentUpdate или на PureComponent, чтобы убрать лишние вызовы render этих компонентов.

    4. import Logo from 'images/Logo.png';
    называть пути к ресурсам с заглавной буквы неправильно.

    5. Вместо:
    const StyledLogo = styled.img.attrs({
      src: Logo,
      alt: 'Aviasales'
    })`
      width: 60px;
      height: 61px;
    `;

    Удобней в использовании:
    const StyledLogo = styled.img`
      width: 60px;
      height: 61px;
    `;

    и:
    <StyledLogo src={logo} alt="Aviasales" />

    6.
    const Error = ({ text }) => (
      <StyledError dangerouslySetInnerHTML={{__html: text}} />
    );

    зачем тут html?
    Для сохранения переносов строки есть css правило:
    white-space: pre-line;

    7. Вместо:
    let element;
    
    if (error && !isLoading) {
      element = <Error text={error} />;
    }
    if (!error && isLoading) {
      element = <Loader />;
    }
    if (!error && !isLoading) {
      element = (
        <>
        <Heading />
        <Main
        isCurrencyExchanging={isCurrencyExchanging}
        activeCurrency={activeCurrency}
        handleCurrencyChange={this.handleCurrencyChange}
        ticketsFilteredByStops={ticketsFilteredByStops}
        stops={stops}
        handleStopsChange={this.handleStopsChange}
        handleUncheckOther={this.handleUncheckOther}
        />
        </>
      );
    }
    return element;

    Лучше:
    if (isLoading) return <Loader />;
    
    if (error) return <Error text={error} />;
    
    return (
      <>
        <Heading />
        <Main
          isCurrencyExchanging={isCurrencyExchanging}
          activeCurrency={activeCurrency}
          handleCurrencyChange={this.handleCurrencyChange}
          ticketsFilteredByStops={ticketsFilteredByStops}
          stops={stops}
          handleStopsChange={this.handleStopsChange}
          handleUncheckOther={this.handleUncheckOther}
        />
      </>
    );


    8. Вместо:
    filterTickets = (tickets, stops) => {
      return tickets.filter((ticket) => {
        return values(stops).indexOf(ticket.stops) !== -1;
      });
    };

    Лучше:
    filterTickets = (tickets, stops) => tickets.filter(
      ticket => values(stops).includes(ticket.stops),
    );


    9. Не пропускайте отступы между методами и между вложенными свойствами css.

    10. Вместо:
    componentsDidMount() {
      // много кода
    }


    Лучше:
    componentsDidMount() {
      this.fetchSomeData();
    }


    11. Директории и индексные файлы для каждого компонента, имхо, лишнее. Лучше компоненты определять в одноименном файле и только когда возникнет необходимость в его декомпозиции, заменять на директорию и index.

    12. Loader и Error самое место в директории components/core или что-то вроде того. Там же, по-хорошему, должны находиться базовые компоненты: кнопки, инпуты, табы, чекбоксы.

    13. Styled компоненты, имхо, лучше писать в файле с компонентом, где они применяются. Так анализ кода происходит гораздо быстрей и легче поддерживать. Исключение - переиспользуемые компоненты.
    Даже если вам больше нравится выносить, называть файл style неправильно, вы там описываете компоненты, а не просто стили.
    Ответ написан
    3 комментария
  • Синтаксическая ошибка в React export default?

    0xD34F
    @0xD34F Куратор тега React
    Если export default встречается более одного раза, то при импорте будет непонятно, что именно надо импортировать.
    Ответ написан
    1 комментарий
  • Как отрендерить JSON в React.js?

    evgenyspace
    @evgenyspace
    Исследователь
    Хочу добавить по структуре данных json. Если есть возможность, храните данные в формате массив чего-то, а не объект чего-то. Метод map для массива быстрее того же for in для объекта.
    {
        books: [ { id: 1, name: "Sample", author: "Somebody", genre: "Tales" }, { id: 2, name: "Sample2", author: "Somebody2", genre: "Tales2" } ]
    }


    book1, 2, ... N - вставлять нет смысла, т.к. книги хранятся в значении свойства "books", а id определяет порядковый номер
    Ответ написан
    Комментировать