• Как сделать замену текста на ссылку с помощью JavaScript?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Погуглите «url regexp» и станет вам щастье.
    Ответ написан
    1 комментарий
  • Как подсветить активную якорную ссылку?

    @yavasilek
    Можно подсветить не изменяя классы, а через псевдокласс :target
    Для Вашего примера необходимо добавить следующее
    h1:target{
    /*тут стиль для подсвечивания*/
    }
    Ответ написан
    2 комментария
  • Как заменить символ в строке js?

    zona7o
    @zona7o
    Веб-разработчик
    var str = '../images/patterns/0/0/1/1.png';
    str.replace('1.png', '2.png');
    Ответ написан
    Комментировать
  • Как сдвинуть 1 из flex элементов в конец строки?

    @Dlike Автор вопроса
    noobe
    Всем спасибо, самый топ вариант который подсказали:
    последнему элементу margin-left auto
    мб и не совсем верно, но просто
    Ответ написан
    Комментировать
  • Что за ошибка в консоли браузера devtools failed to parse sourcemap?

    Fzero0
    @Fzero0
    Вечный студент
    В Chrome есть поддержка исходных карт в инструментах разработчика и соответственно он не может их найти если вас это прям так напрягает отключите
    f75366b8d0d557924c8ce381cd4e4368.png
    Ответ написан
    Комментировать
  • Лексическое окружение, контекст вызова. Почему это разные понятия?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Лекс. окружение – это переменные, которые определены и "видны" функции.
    Контекст – это this.
    function outer() {
      var a = 1; // переменная в лексическом окружении ф-ии inner()
                 // внутри inner() можно использовать значение a
      return function inner() {
        console.log("a == ", a, "this == ", this);
      }
    }
    
    var f1 = outer(); // f1 - функция
    f1(); // a == 1, this == window или self
    
    var f2 = f1.bind({title: "Ololo"}); // f2 - новая функция
    f2(); // a == 1, this.title == "Ololo"
    Ответ написан
    1 комментарий
  • Что такое end-to-end тестирование?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Понятие еnd-to-end обозначает всего-навсего классификацию тестов по уровню, на котором тестируется система, и, само по себе, ничего не говорит ни о том, какие конкретно должны быть эти тесты, ни о том, какую роль они играют в общей стратегии обеспечения/проверки качества и, также, не является методикой тестирования. (Методика - это совсем другое понятие.)

    Для понимания сути этого понятия хорошо сравнить его с модульным ("нижний" уровень) и интеграционным ("средний") тестированием на каком-нибудь конкретном примере. Давайте рассмотрим некий сферический webshop в вакууме. Предположим, в нем есть 50 классов и для большинства из них написаны модульные тесты. Они проверяют исключительно функционал конкретного модуля (чаще всего, класса), т.е. тот, что зависит только от самого модуля и ни от чего чего более. Потом есть интеграционные тесты. Они проверяют корректность работы отдельных "модулей", если их собрать вместе согласно архитектурe. Например, работает ли правильно "Корзина", состоящая, в свою очередь, из 10 классов (предварительно проверенных модульными тестами), или "Корзина", подключенная к "Вебморде" и т.д. Где-то повыше в этой иерархии есть такие интеграционные тесты, которые проверяют конкретный функционал всей системы. Например, отправляется ли юзеру мейлом копия оплаченного заказа...

    И вот тут начинается самое интересное для понимания того, что такое end-to-end тестирование! Можно представить себе тест, проверяющий, что соответствующий мейл генерируется и сбрасывается SMTP серверу. Если SMTP сервер не рассматривать, как часть разрабатываемой системы, то этот тест вполне можно назвать end-to-end тестом (послали кучку HTTP запросов через "Вебморду" и проверили сброс мыла на SMTP - все зашибись!). Однако, если настройки и эксплуатация SMTP сервера - часть проекта (например, заказана разработка webshop "под ключ"), может оказаться, что это мыло будет отфильтровано каким-нибудь спам-фильтром, превысит лимит почтового ящика пользователя... короче, не дойдет до него. Тогда этот же самый тест уже нельзя считать end-to-end, а нужно бы было написать тест, проверяющий приход мыла в POP3/IMAP ящик. (Опять же, если это действительно нужно! Ибо, в зависимости от конкретных функциональных и нефункциональных требований, архитектор и QA инженер вполне могут найти возможность обеспечить адекватный контроль качества и без такого теста.)

    Таким образом, end-to-end тесты, это такие интеграционные тесты, которые воздействуют на систему через ее самые внешние интерфейсы и проверяют ожидаемую реакцию системы через эти же интерфейсы. Почему именно интеграционные? Потому, что это единственное, что можно о них сказать наверняка: они по определению не могут быть модульными тестами. А все остальное: являются ли они одновременно приемочными, нагрузочными или еще какими - зависит только от общих плана/стратегии тестирования и той роли, которые эти тесты в них играют.
    Ответ написан
    Комментировать
  • Reselect: как закешировать данные, записываемые в reducer?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    По-умолчанию в createSelector используется функция поверхностного сравнения. Хотите делать глубокое сравнение используйте createSelectorCreator и свою функцию сравнения. В документации есть пример.
    Ответ написан
    Комментировать
  • Какие символы разрешить в логине (имени пользователя)?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    $regex_name4 = '/^[a-zA-Z0-9-_]{3,20}$/';
    Ответ написан
    Комментировать
  • Git. Случайно удалил локальный файл, как восстановить?

    isqua
    @isqua
    Научу HTML, CSS, JS, BEM и Git
    Если состояние такое:
    $ git status
    
    On branch master
    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
    	deleted:    myfile


    То файл можно восстановить вот так:

    git checkout myfile

    Чтобы восстановить файл из конкретного коммита или ветки, можно сделать вот так:

    git checkout abcde myfile # abcde — хеш коммита
    # или
    git checkout feature3 myfile # feature3 — имя ветки
    Ответ написан
    2 комментария
  • Как изменить название ветки в git?

    miraage
    @miraage
    Старый прогер
    git branch -m old_branch new_branch         # Rename branch locally    
    git push origin :old_branch                 # Delete the old branch    
    git push -u origin new_branch   # Push the new branch, set local branch to track the new remote
    Ответ написан
    Комментировать
  • Display: flex - может ли один из контенеров занимать все оставшееся пространство?

    allishappy
    @allishappy
    Используйте flex-grow. О его применении посмотрите здесь https://habrahabr.ru/post/242545/
    Ответ написан
    Комментировать
  • Можете оценить уровень кода?

    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 у вас будут происходить только на стороне клиента?
    Ответ написан
    Комментировать
  • Стоит ли переходить на 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 комментарий
  • Что такое {this.props.children} и когда вы должны его использовать?

    kshshe
    @kshshe
    Frontend developer
    В children попадает массив элементов, находящихся "внутри" компонента. Например, в таком случае:
    <SomeComponent>
        <ChildComponent />
        <ChildComponent />
        <ChildComponent />
    </SomeComponent>

    SomeComponent получит props, где в children будут все ChildComponent.
    Ответ написан
    Комментировать
  • Как вывести все name из объектов в массиве (jsonplaceholder)?

    0xD34F
    @0xD34F Куратор тега React
    class App extends Component {
      state = {
        users: []
      }
    
      componentDidMount() {
        fetch('https://jsonplaceholder.typicode.com/users')
          .then(response => response.json())
          .then(users => this.setState({ users }));
      }
    
      render() {
        return(
          <div className="App">
            <table>
              <tbody>
              {this.state.users.map(n => (
                <tr key={n.id}>
                  <td>{n.name}</td>
                  <td>{n.username}</td>
                  <td>{n.email}</td>
                  <td>{n.website}</td>
                </tr>
              ))}
              </tbody>
            </table>
          </div>
        )
      }
    }
    Ответ написан
    1 комментарий
  • Послать json запрос на сервер с помощью redux?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    В главе "Асинхронные действия" разбирается.
    Вообще, там весь курс довольно короткий, можно посмотреть и понять как двигаются данные в redux приложении.
    Ответ написан
    3 комментария
  • На macOS Sierra плохо переключается язык с помощью сочетания клавиш - как исправить?

    Нужно поставить сочетание кмнд+пробел на переключение на предыдущий язык, а не на следующий. Ну и понятно проверить чтобы сочетание больше нигде не дублировалось. Автоматическое переключение нужно выключить.
    Ответ написан
    4 комментария
  • Тестирование React Redux?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    1 - да стоит тестировать каждый action, reducer (юнит-тесты) и какие-то моменты из компонентов (так как для всего компонента можно сделать снапшот + точечно покрыть желаемые места юнит тестами). Все функции, которые у вас в utils/helpers (вспомогательные) - тоже нужно покрывать юнит-тестами.

    2 - По туториалам для unit-тестирования:
    a) тестирование логики (экшены/редьюсеры)
    б) тестирование компонентов (включая снапшоты)

    3) Jest, enzyme. Пробовал (и тоже неплохо) - mocha, chai. Для e2e использовали puppetter, интересным выглядит cypress. Для тестирования саг юнит тестами - либо по доке, либо с помощью redux-saga-test-plan
    Ответ написан
    Комментировать
  • Создание ассоциативного массива в JS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    var arr = { key1: 'value1', key2: 'value2' };
    Ответ написан
    3 комментария