Задать вопрос
  • В каком районе Питера больше всего ИТ-компаний (желательно с разработкой на Java)?

    opium
    @opium
    Просто люблю качественно работать
    А какая разница вы же не можете работать во всех, самый простой вариант съёмное жилье около работы
    Ответ написан
  • Оценка своего уровня. Как улучшить код?

    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 комментариев
  • Как написать большое приложение на Vue.js и не умереть?

    @Buzzzzer
    Возможно что то не так в конфигах webpack ?

    У меня сейчас в проекте порядка 600+ vue компонентов.
    Пересборка в dev с hot reload занимает 2-5 сек.
    (win, ram 16gb, ssd, какой то старенький i3)
    Ответ написан
    4 комментария
  • Когда нужно использовать computed, а когда methods во Vue.js? И в чем их разница?

    Decadal
    @Decadal
    Если результат вашей функции не опирается на внутренние данные, используйте methods.
    Например, у вас есть внутри vue некая range, которая служит верхней границей для Math.random. Если реализовать при помощи метода, то каждый раз он будет возвращать новое значение Math.random.
    Реализация через computed будет ожидать изменений вашего range, а иначе вернет то же число, которое сгенерилось первый раз
    js:
    var app = new Vue({
            el: '#content',
            data: {
                range: 1
            },
            computed: {
                rand: function () {
                    return Math.random() * this.range ; //ожидалось что app.rand будет давать случайное число
                }
            },
            methods: {
                show: function (event) {
                    alert('Случайное число: ' + this.rand); // но нет, число одно и то же
                },
           }
    });

    html:
    <div id="content">
    <button v-on:click="show">показать число</button>
    </div>


    В итоге оно сгенерирует число один раз и будет выводить его постоянно при клике на кнопку. Если вы введете в консоли app.range = 2; то генерируемое число разово изменится.

    Пример для лайков, упомянутый в комментарии:
    new Vue({
       el: '#content',
       data: {
          likes: 0,
       },
    });

    <div id="content"><button v-on:click="likes += 1">+1</button></div>
    Ответ написан
    9 комментариев
  • Где дешево держать .com домены?

    @OlegPyatakov
    pyatakov.com
    Базовая цена за домен .com - $7,85 в год. Это та сумма, которую чарджит Verisign, администратор зоны .com.
    Все что ниже этой стоимости, можно считать, спонсируется регистратором. Зачем регистраторам это делать? - либо привлекать новых клиентов (и тогда надо смотреть на цены продления доменов), либо субсидировать за счет сопутствующих услуг (тут уже сложно что-то рекомендовать без понимания, что еще вы готовы заказывать)
    Ответ написан
    3 комментария
  • В чем ошибка данного js кода?

    potapchino
    @potapchino
    document.getElementById("button_one")
    у вас нет элемента с id="button_one"

    document.querySelectorAll('h1')
    возвращает группу элементов

    function startQuest() {
      var startLink = document.querySelector('.button_one');
      startLink.onclick = function() {
        var title = document.querySelector('h1');
        title.style.display = 'none';
      }
    }
    Ответ написан
    Комментировать
  • Как сделать кнопку выхода на Wordpress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!

    Используйте wp_logout_url
    https://codex.wordpress.org/Function_Reference/wp_...
    а в метод передайте home_url()
    <a href="<?php echo wp_logout_url( home_url() ); ?>">Выход</a>
    Ответ написан
    6 комментариев
  • Какой язык программирования даёт возможность пользователю самостоятельно добавлять/редактировать/удалять свои записи?

    Stalker_RED
    @Stalker_RED
    Если на средней стадии изучения вы начали подозревать, что html и css это не языки программирования, то у меня для вас хорошие новости: похоже это не средняя стадия, а самое-самое начало начальной стадии. А все самое интересное еще впереди :)

    Подойдет любой серверный язык программирования. Это не полный список, но все популярные языки в нем есть.
    А дальше выбирайте какой вам больше нравится, какой проще учить, на каком легче работу найти или за какой больше денег дают, или по какому-то другому признаку.
    Ответ написан
    Комментировать
  • Можно ли к ссылки для задания Cron приделать логин и пароль?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    крон всегда можно натравить на скрипт

    и в скрипте реализовать любую логику, в том числе авторизацию
    Ответ написан
    Комментировать
  • Деградация файлов -- это нормально?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Файлы не могут деградировать. Деградировать могут диски, но при этом файлы просто перестают читаться. Если файл прочитался (практически все форматы изображений, видео, музыки имеют контрольный код для сверки), то 99.9999%, что он точно такой же как и раньше.

    Либо у вас что-то с софтом, которым вы открываете эти файлы.
    Либо, как вариант, может какой-то вирус покоцал файлы, но я не знаю современного вируса, который бы портил их частично. Криптеры просто целиком криптуют.
    Ответ написан
    6 комментариев
  • Java или Node.js для большого проекта?

    сложность/скорость разработки не так интересует

    Если сложность/скорость разработки не так интересует, могу посоветовать написать на ассемблере.
    Ответ написан
    Комментировать
  • Как правильно получить данные элемента (JS)?

    Stalker_RED
    @Stalker_RED
    Ответ написан
    Комментировать
  • Как сложить определенные свойства объектов?

    @Interface
    const a = {point: 1};
    const b = {point: 2};
    const c = {point: 3};
    
    const arr = [a, b, c];
    
    arr.reduce((sum, item) => sum + item.point, 0); // 6


    Ну или так:
    const a = {point: 1};
    const b = {point: 2};
    const c = {point: 3};
    
    const arr = [a, b, c];
    
    arr
        .map(item => item.point)
        .reduce((sum, value) => sum + value); // 6


    Или если в проекте уже есть lodash:
    const a = {point: 1};
    const b = {point: 2};
    const c = {point: 3};
    
    const arr = [a, b, c];
    
    _.sumBy(arr, item => item.point);
    Ответ написан
    Комментировать
  • Какие в Москве есть бaдишопы кроме EPAM и Luxoft, перевозящие сотрудников в США по L1B-визе?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    H1B не лучше, а хуже в первую очередь из-за квот и рандома. По L1B нет квот, переезд гарантирован, грин-карту быстро получите.
    Но тут всё не так просто, для начала ответьте на вопросы:
    1) А зачем компании вас вообще перевозить?
    2) А достаточно ли у вас знаний, умений и навыков для вакансии с релокейтом?
    3) Какие условия релокейта вам предложат?
    4) Есть ли у вас $15-20к для сопутствующих расходов?

    Перевозят обычно старших разработчиков. Людей с опытом и определённым набором навыков. Ну или гениев, участников всяких олимпиад по кодингу и международных стажировок, ну или просто дико везучих людей без всего вышеперечисленного :)
    Вы же не думаете, что всех и просто так перевозят, правда?
    Ответ написан
    9 комментариев
  • Как получить id элемента с определенным классом по которому кликнули?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    Если я понял вопрос, то я бы так сделал
    document.addEventListener('click', function(e) {
      if (e.target.classList.contains('test')) {
        console.log(e.target.id);
      }
    })
    Ответ написан
    6 комментариев
  • Как получить id элемента с определенным классом по которому кликнули?

    @alexalexes
    Если изначально правильно повесить обработчик на элемент, то при выполнении обработчика искать этот элемент не нужно, его дескриптор будет находится в свойстве e.target дескриптора события.
    Ответ написан
    Комментировать
  • Какой хороший курс по JS (для среднего уровня)?

    tundramani
    @tundramani
    learn.javascript.ru
    +
    фленагана справочник
    +
    годы тяжелой практики
    Ответ написан
    2 комментария
  • Как правильно получить элемент по классу (js)?

    nakree
    @nakree
    Fullstack Developer
    .getElementsByClassName - всегда возвращает коллекцию, даже если элемент один.

    Чтобы заработал Ваш пример должно быть так:
    var list = document.getElementsByClassName('list')[0];
    var item = list.getElementsByClassName('item')[3];


    Выберет первый элемент с классом .list и найдет в нем четвертый элемент с классом .item
    Ответ написан
    Комментировать
  • Может ли NodeJS использоваться как основа для крупного проекта?

    @kazmiruk
    @d00mko видимо не потрудился прочитать статью, прежде чем посоветовать ее Вам. В статье как раз пытаются избавиться от мифов вокруг ноды.
    По сути вопроса - нода вполне подходит для проекта любого размера и сложности (как и пхп, раби, питон, ява и т.п.) Никогда в жизни не сталкивался с ситуацией, что язык становился узким местом в веб приложении. Если Вы с этим столкнетесь, то значит Ваша архитектура уже идеальна, у вас миллионы пользователей и у Вас миллиарды денег, чтобы взять и переписать все с нуля где-нибудь на побережье океана попивая мохито, принесенное личным барменом.
    Ява - готовьтесь к тому, что Вам надо МНОГО оперативной памяти. Разработка будет вестись долго, но большинство глупых ошибок Вы избежите в силу особенностей языка.
    ПХП - готовьтесь к тому, что в Вашем коде будут появляться какашки, так как из всех пхп кодеров лишь доли процента могут написать хороший код. Это действительно очень трудно, когда язык сам манит писать все больше и больше какашек ) Лишь просветленные могут удержаться )
    Нода - Вас ждет мир непонятного асинхронного кода, но как только наступит просветление, то Вы будете писать намного более эффективные приложения, чем Ваши товарищи пхпщники ) Наилучшее применение - чаты, кометы и т.п. Но и в качестве веб-сервера чувствует себя замечательно.
    Питон - можно использовать и асинхронный подход и синхронный. Памяти жрет намного меньше, чем Java (личный опыт. разница была почти в 7 раз). По скорости работы практически не уступает яве. По скорости разработки разрывает ее в клочья
    Раби - ничего не могу сказать дельного, но синтаксис мне не нравится.
    Эрланг - если Вы действительно суровы и Вам нужна максимальная производительность - это Ваш выбор. Столько боли и страдания Вам не доставит ни один язык. Вы можете часами сидеть и тупить над одной строчкой кода, но каждый раз после написания такой строчки Вы будете впадать в экстаз ) Да и пока вы часами тупили над одной строчкой в эрланге на другом языке вам бы пришлось написать 200 строчек. Хардкор вариант, есть много тестов, уроков и примеров, но сам бы я не рискнул начинать проект на нем, так как моих знаний не достаточно, а найти разработчика - нереально.
    Вообще, не пишите серьезные проекты на том, что хотите изучить или то, что модно. Пишите на языке, который лучше всего знаете.
    Ответ написан
    7 комментариев