• Что делают эти символы в React?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    Это не символы React, это символы js, а позволяют они с es6 записывать переменные прямо в строку, не разделяя ее
    let lala = 'World';
    console.log(`Hello ${lala}`) // res: Hello World

    Работает только с обратными кавычками.

    Символ ? -это же альтернатива условию if? тогда как код который я написал выглядел бы с if? просто хочу понять такую конструкцию react но c if чтоб было более понятно.

    Да, это аналог if-else
    Ответ написан
    3 комментария
  • Что делают эти символы в React?

    Комментировать
  • Что делают эти символы в React?

    0xD34F
    @0xD34F Куратор тега React
    1. https://developer.mozilla.org/ru/docs/Web/JavaScri...
    2. https://developer.mozilla.org/ru/docs/Web/JavaScri...

    Забудьте про реакт на ближайшие полгода и марш изучать js.
    Ответ написан
    6 комментариев
  • Действительно ли vue слабый фреймворк?

    @Andrew-Bogdanov
    Какой фрукт лучше, яблоко или банан? Какой телефон лучше айфон или самсунг? Какое животное лучше, слон или леопард?
    Ответ написан
    7 комментариев
  • Что лучше, поиск в массиве или несколько условий?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Лучше - идентификатор (и подпись, чтобы не могли подменить идентификатор на клиентской стороне) формы вместе с POST-запросом с привязкой к значениям всех отправляемых полей внутри этой формы и URL.
    ID формы (из POST'а) - как ключ нужного элемента в массиве (нужной формы).
    Ответ написан
    7 комментариев
  • Оценка своего уровня. Как улучшить код?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. Используйте const вместо let для определения переменных которые не переопределяются в коде. Это помогает снизить когнитивную нагрузку с человека читающего код и негласный стандарт в React разработке.

    2. Такие вещи как globalStyles и конфигурацию store лучше вынести в отдельные файлы. Они могут со временем хорошо разрастись.
    По поводу globalStyles, вы вообще можете вынести их в отдельный css файл.

    3. Вместо:
    {
      isModal
      ? <Route path="/auth" component={AuthPopup} />
      : null
    }

    лучше:
    {isModal && <Route path="/auth" component={AuthPopup} />}


    4. Вместо:
    function mapDispatchToProps(dispatch) {
        return {
            autoLogin: () => dispatch(autoLogin()),
            getBrowser: () => dispatch(getBrowser()),
            getMedia: () => dispatch(getMedia())
        }
    }


    лучше:
    const mapDispatchToProps = {
      autoLogin,
      getBrowser,
      getMedia,
    };


    5. Точки с запятыми в конце то есть, то нет. Определитесь и приведите код к одному виду.

    6.
    & label {}
    & input {}
    & span {}

    Это не очень хороший подход. Во-первых ваши стили не изолированные, что может приводить к неожиданным результатам. Во-вторых у вас очень много дублирования стилей. Определите Input и Label как базовые компоненты и используйте в разных местах, то же с остальным если есть.

    7. Почему папка со страницами называется Containers? Дань бойлерплейтам?

    8. Использование trailing comma является хорошей практикой.

    9.
    import {combineReducers} from 'redux';
    import photoReducer from './photoReducer';
    import authReducer from './authReducer';
    import globalReducer from './globalReducer';
    
    export default combineReducers({
        photoReducer, authReducer, globalReducer
    })


    Все таки приятней работать с хранилищем в котором ключи не имеют в названии слова reducer:
    import {combineReducers} from 'redux';
    import photo from './photoReducer';
    import auth from './authReducer';
    import global from './globalReducer';
    
    export default combineReducers({
      photo, 
      auth,
      global,
    });


    10. Забудьте вообще, что в языке есть возможность использовать вложенный тернарный оператор:
    return e === 'invalid-email' ? 'Неверно указан e-mail'
        : e === 'user-not-found' ? 'Указанный e-mail на найден'
        : e === 'wrong-password' ? 'Неверный пароль'
        : e === 'email-already-in-use' ? 'Указанный e-mail уже используется'
        : e === 'network-request-failed' ? 'Нет подключения к интернету'
        : e === 'operation-not-allowed' ? 'Произошла ошибка, попробуйте снова'
        : e === 'popup-closed-by-user' ? 'Окно авторизации закрыто пользователем'
        : e === 'account-exists-with-different-credential' ? 'Аккаунт уже существует с другими данными, используйте другой способ авторизации'
        : e

    Это одна из самых худших практик в JavaScript разработке. Тут лучше подойдет конструкция switch case

    11. Константы actionTypes лучше вынести в папку constants и разложить по разным файлам, иначе со временем у вас там будет свалка.

    12. Вместо:
    import {SET_ACTIVE, CHANGE_VALUE, SET_DEFAULT, UPLOAD, UPDATE_IMAGE, SET_IMAGE_ERROR, SET_LIKE, SET_COMMENT, ADD_ARTICLE_SUCCESS, FETCH_ARTICLES_START, FETCH_ARTICLES_SUCCESS, FETCH_ARTICLES_ERROR} from '../actions/actionTypes';

    Лучше:
    import {
      SET_ACTIVE,
      CHANGE_VALUE,
      SET_DEFAULT, UPLOAD,  
      UPDATE_IMAGE,
      SET_IMAGE_ERROR,
      SET_LIKE,
      SET_COMMENT,
      ADD_ARTICLE_SUCCESS,
      FETCH_ARTICLES_START,
      FETCH_ARTICLES_SUCCESS,
      FETCH_ARTICLES_ERROR,
    } from '../actions/actionTypes';


    13. Попробуйте внедрить библиотеку reselect. И для получения значения из store вместо записи вида:
    function mapStateToProps(state) {
        return {
            browser: state.globalReducer.browser
        }
    }


    использовать селектор:
    const mapStateToProps = state => ({
      browser: browserSelector(state),
    });
    Ответ написан
    12 комментариев
  • Для чего делают ховеры на js?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Можете не искать подвоха, его нет. Всё очень просто и прозаично — это их родной БЭМ в его чистейшей интерпретации. Они же используют полный стек БЭМа, а не только нотацию имен классов. Любой стиль определяется только классом. Каждый компонент лежит в отдельной папке, внутри js/css/img, стили разбиты еще на файлы — стили блока/элемента/модификатора в отдельных файлах. Всё это собирается чудо-машиной БЭМ.js.
    Ответ написан
    4 комментария
  • Как получить env переменную?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    webpack.DefinePlugin
    module.exports = {
      plugins: [
        new webpack.DefinePlugin({
          __API_URL__: JSON.stringify(process.env.API_URL),
        });
      ],
    };
    Ответ написан
  • Как передать значение переменной js php?

    erge
    @erge
    Примус починяю
    XMLHttpRequest (AJAX) - отправка и обработка ответ...

    в статье есть хорошие примеры.
    вам нужно в функции updateQty через AJAX запрос вызвать php скрипт и либо методом GET, либо методом POST передать в него данные.
    Ответ написан
    Комментировать
  • Оцените верстку?

    SkiperX
    @SkiperX Куратор тега CSS
    Нормально для первого раза

    Absolute и relative старайся не использовать (для сдвига блоков), делай позиционирование через flex и отступы.

    Не смотри на верстку как на плакат. Контент там еще изменится, блоки могут передвигаться. Верстка от этого ломаться не должна.
    тык
    0d0a596894.jpg
    Ответ написан
    Комментировать
  • Оцените верстку?

    Anitamsk
    @Anitamsk
    Frontend Dev
    Ошибок довольно много. Из тех что я увидела:
    1. Ваш контент не центрирован, используйте нативный центровщик либо библиотеки типа Bootstrap4, делайте отдельный div и закидывайте его туда, сейчас ваш контент расползается, и это учитывая то, что у вас просто Desktop версия, не адаптивная.
    2. Название классов - когда вы пишите код, старайтесь использовать методологию, например БЭМ, пишется не header_menu_button, а примерно header__menu-button, header__menu-button--active, 2 нижних подчеркивания это элемент, две черты после элемента - модификатор, и ваш код будет более читабельный.
    3. Старайтесь думать о том что бы не писать код 2 раза, если ваша кнопка на сайте будет повторяться 2 раза, то для кнопки пишется базовый стиль допустим site-button, а в header__menu-button вы уже дописываете стили позиционирования и в итоге ваша конструкция имеет вид
    4. Научитесь использовать правильную вложенность, вы должны представлять сайт как лего, правильно перебросив контент по блокам, так как если у вас будет адаптивная верстка, вам нужно продумывать еще и адаптацию этих блоков к экранам с меньшим разрешением.
    5. И последнее, скачайте какие нибудь платные курсы - бесплатно, допустим HTML Academy или другой конторки обучающей новичков, и вам будет легче учится верстать правильно
    Ответ написан
    Комментировать
  • Можно ли использовать Webpack для верстки многостраничнике?

    @deliro
    Как вариант, можно использовать единственную точку входа, а выполнение кода разделить каким-то самописным роутером.
    Ответ написан
    Комментировать
  • Что лучше изучить начинающему vue или react?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Попробуйте обе библиотеки и выберите для изучения ту, которая больше понравится. Написать два Todo List много времени не займет.
    Ответ написан
    Комментировать
  • Что лучше изучить начинающему vue или react?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Лично мое мнение, все зависит от задачи, я пишу и на react и на vue.
    Если что то надо сделать быстро, либо для себя, где четко знаешь что там будет, то мне проще писать на vue, там меньше бойлерплейта. Подключаешь Vuex для хранения состояния и все отлично.

    Но если в коммерческой разработке в большим проектом, то с реактом шансов прострелить себе ногу гораздо меньше. Если делаешь с четкой раздельной архитектурой react + redux + sagas, то жить как то становится как то проще.

    А на начальном этапе в целом выбор не очень важен. И там и там ты найдешь работу. Конечно по реакту охват шире, я думаю потому, что его больше знают, по нему больше мануалов.
    Ответ написан
    Комментировать
  • Можно ли использовать при верстке CSS grid и Flexbox?

    bootd
    @bootd Куратор тега CSS
    Гугли и ты откроешь врата знаний!
    Можно, а почему вы решили что нет? Гриды и флексы призваны решать немного разные вещи
    Ответ написан
    3 комментария
  • Какой смысл несет в себе конструкция !! в js?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Получение логического эквивалента значения. Оператор логического отрицания применяется дважды, например:

    !!187 -> !false -> true
    !!NaN -> !true -> false

    Тот же результат даст Boolean(значение).
    Ответ написан
    Комментировать
  • Отправка без перезагрузки, спиннер и очистка полей?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Ответ написан
    Комментировать
  • Разворачивают ли у вас разработчики сервисы локально?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Кто как справляется с этой проблемой?


    Мы легко решили для себя эту проблему с помощью двух инструментов:
    1. Часть сервисов работает на тестовом сервере, доступном локально
    2. Docker

    P.S. Разворачивать и обновлять проекты в докере - дело если не нескольких секунд, то минут, не более того. При этом за всю настройку и прочую богадельню связанную с настройками ОС для сервиса, софта и пр. - отвечают авторы самого сервиса, разработчику достаточно скачать/обновить несколько файлов описывающих контейнер(ы) и выполнить 1-2 команды, дальше всё соберётся и поднимется автоматически.
    Ответ написан
    Комментировать
  • Много маленьких запросов к REST API или один большой?

    rockon404
    @rockon404
    Frontend Developer
    Если у вас сейчас что-то вроде этого:
    GET '/posts/slug/'
    
    {
      post: { /* ... */ }
    }
    
    GET '/posts/slug/comments/'
    
    {
      comments: { /* ... */ }
    }
    
    GET '/posts/slug/comments/users/'
    
    {
      users: { /* ... */ }
    }
    
    GET '/posts/slug/author/'
    
    {
      author: { /* ... */ }
    }
    
    GET '/posts/slug/meta/'
    
    {
      meta: { /* ... */ }
    }


    то логично все связанные данные объединить в один запрос:
    GET '/posts/slug/'
    
    {
      post: { /* ... */ },
      linked: {
        users: { /* ... */ },
        comments: { /* ... */ },
        meta: { /* ... */ },
      },
    }
    Ответ написан
    Комментировать