• Какие материалы считаются лучшими для глубоко изучения JS?

    @dmitry-toster
    Для глубоко изучения JS

    Вряд ли есть что-то лучше серии книг Kyle Simpson - You don't know JS, где одной только теме про thisили замыканию уделена целая книга

    Интересен супер подробный разбор event loop

    Помимо книг выше, есть также отличное видео на YouTube после которого отпадут все вопросы как оно работает

    Что можно считать лучшим источником

    Собственно Standard ECMA-262
    Ответ написан
    1 комментарий
  • Лучший интерактивный русскоязычный сайт с задачами по JS?

    AnnTHony
    @AnnTHony
    Интроверт
    Ответ написан
    Комментировать
  • Колледж или 11 для программиста?

    Anitamsk
    @Anitamsk
    Frontend Dev
    Что вам мешает доучиться до 11, потом поступить заочно в какой-нибудь заштатный ВУЗ, спокойно учиться 4 года и в это же время получать опыт на профильной работе, пока однокурсники изучают Паскаль и сортировку массивов сидя на лекции.

    Вы слишком переоцениваете высшее образование для программиста в целом(по факту оно вам нужно будет, если вы планируете прыгнуть на хорошую должность в какую нибудь интерпрайз контору или на руководящую должность).

    Убейте двух зайцев - получите вышку, и к ней 4 года работы по профилю = PROFIT. У вас есть 2 года, что бы выучится до джуна нужного вам стека программирования(что бы после окончания 11 класса и поступления на заочку - показать потенциальному работодателю свои скилы и "портфолио" из пет проектов), и не завалить ЕГЭ(хотя если вы будете поступать заочно - баллы вам будут толком не нужны).
    Ответ написан
    2 комментария
  • Как правильно разобрать массив?

    alekseyHunter
    @alekseyHunter
    Android developer
    Странное решение. Зачем так хранить данные? Используйте объекты.

    var arr= [
    {
      characteristics: {first: 1, second: 2 },
      page: 2,
      price_max: 10,
      price_min = 1
    },
    {
      characteristics: {first: 1, second: 2 },
      page: 2,
      price_max: 10,
      price_min = 1
    }
    ];
    
    arr.forEach(function(element,i,arr) {
      element.page += 1;
    };
    Ответ написан
    5 комментариев
  • Поможете оценить проект?

    @ned4ded
    Верстка, Фронтенд
    Добрый день.

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

    Есть несколько элементов, которые я бы сделал по-другому во vue:
    1) Использовал бы vuex. event-bus полезен в некоторых местах (чтобы не засорять стор, например), но для работы со сколько-нибудь сложным апи (эмуляцией которого является ваша папка data) он просто необходим. Ну и вместе с ним переработал бы структуру проекта (с использованием модулей, более удобного структурирования компонентов и т.п.). Ну что вот это такое "search-overlay-active-notify-dark-backgr-in-header"?
    3) Поправил бы некоторые орфографические ошибки: stor, imgAndHerInstancesSizes, сont
    4) Не стал бы пересылать в props объект data. Во первых, можно запутаться. Во вторых, данные должны быть как можно более плоскими.
    5) Не стал бы засовывать в computed свойство сеттер, который обладает достаточно сложной логикой. Для исполнения такой логики есть методы. Вообще computed свойства должны быть максимально простыми. Не нужно в них пихать асинхронные импорты, это уже перебор.
    6) Не стал бы использовать localstorage для хранения промежуточных вычислений. В конце концов, для управления состоянием существует vuex.
    7) Не стал бы усложнять логику рендера TheCartNotEmpty, почему просто не сделать ее через if?
    8) Не стал бы изменять DOM напрямую. Когда вы ищите элементы в вашем spa через document.querySelector, то у вас явно проблемы с проектированием )
    9) Переименовал бы компоненты согласно одной из принятых конвенций. Что за TheNews, RptNewsItem? NewsComponent, NewsItemComponent. Не говорю уже о TheContainer, TheActions, название которых не несет никакого смысла.
    10) Избавился бы от string templates. Сделайте их отдельным компонентом.

    В целом по js:
    1) Избавился бы от вложенных if.
    2) Не использовал бы оператор delete для удаления свойств у объекта.

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

    ps, не стал смотреть доскональна все, проверил 5-6 файлов.
    Ответ написан
    2 комментария
  • Построение веб-страницы при помощи REST services на клиенте - так вообще можно?

    Вы из 2007 чтоли? SPA React Angular Тысячи их! Зайдите хоть на тот же ютуб без кеша и с обрезанной скоростью...
    Ответ написан
    Комментировать
  • Можно/целесообразно ли делать анимированные переходы в вебе?

    @karambafe
    Классный пример, спасибо, сохранил себе в закладки.

    Тут сильно зависит от технологий, которые применяются в проекте. Если это стандартный серверный рендеринг, то такое сделать не получится. В данном же случае используется изоморфный фреймворк nuxt.js, который при переходам по ссылкам внутри проекта использует клиентский рендеринг, а при "прямой" загрузке страницы - серверный.
    Именно за счет клиентского рендеринга можно хранить глобально определенные данные и делать такие смены интерфейса

    Тут 2 подводных камня:
    1. Красивые анимации - это всегда сложно и долго для тех, кто с ними плотно не работает.
    2. Почти вся информация забирается с сервера, а значит надо при переходе на новые страницы постоянно делать запросы, выполняющиеся определенное время. В этот момент в интерфейсе желательно вставлять какие-то заглушки, которые потом аккуратно будут заменяться на новый контент.
    Ответ написан
    2 комментария
  • Как организовать корзину товаров на VueJS, Vuex?

    muzikant777
    @muzikant777
    PHP/Vue разработчик
    Удивительно, но в официальном репозитории есть пример прям про это.
    А ещё есть курс для начнинающих на основе этого примера.
    И всё про корзину продуктов! Радость, счастье!
    Ответ написан
    1 комментарий
  • Как связать свойства объекта в v-for с input?

    @deliro
    Агрессивное программирование
    Объект не привязывается через v-model. Для этого лучше использовать массив. Но если очень хочется объект — то:
    https://jsfiddle.net/gvmo58Lb/
    Ответ написан
    Комментировать
  • Разделение 2х строк, как сделать?

    sim3x
    @sim3x
    In [1]: f, s = "Xxxxx : Yyyyy".split(' : ')
    
    In [2]: f, s
    Out[2]: ('Xxxxx', 'Yyyyy')
    Ответ написан
    3 комментария
  • Оценка своего уровня. Как улучшить код?

    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 комментариев
  • Как сделать правильный выбор между C# и Java?

    Sputterspark
    @Sputterspark
    В далеком прошлом, я занимался пустой тратой времени. А именно - выбором языков программирования.

    И продолжаешь этим заниматься.
    Ответ написан
    Комментировать
  • Как организовать двусторонний биндинг в инпуте, вложенном в компонент?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Надо пробрасывать событие input, т.е. замените

    <range v-model.number='value'></range>

    на

    <range :value="value" @input="$emit('input', $event)"></range>
    Ответ написан
    Комментировать
  • Почему не работает JS-код?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Разница в том, когда выполняется код.

    Первые две строки выполняются сразу при загрузке документа. Переменной num назначается значение пустого на тот момент input'а.

    На btn вешается слушатель события. Он не выполняется сразу, а сидит и ждёт события. При каждом возникновении события, выполняется внутренний код функции getSquareNum()

    Код внутри функции – вот этот alert() – выполняется позже, при нажатии кнопки. Выводит определённое в самом начале значение num в квадрате. Или же берет свежее, «на сейчас», значение из input'а во втором варианте кода с «если вместо num подставить document.get...».
    Ответ написан
    1 комментарий
  • Почему не перендеривается компонент?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    Не копируйте пропсу в data, т.к. data инициализируется только в первый раз, и обновляться из пропса не будет.
    https://jsfiddle.net/sdzcovuq/
    Ответ написан
    2 комментария
  • Как правильно подключать стороннюю библиотеку в компоненте vuejs для динамически появляющихся элементов?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Сделайте отдельный компонент, который будет представлять ваш dropify инпут. У него в mounted инициализируйте dropify. И используйте этот компонент в своей таблице вместо обычного input'а.
    Ответ написан
    1 комментарий
  • Как работают приватные свойства в C#?

    @oxidmod
    Модификаторы работают на уровне класса, а не объекта. SomeFunc находится в этом же классе, потому имеет доступ к приватным свойствам.
    Ответ написан
    Комментировать
  • Как работают приватные свойства в C#?

    @heartdevil
    плыву как воздушный шарик
    Свойство может быть доступно и для вложенных однотипных классов.

    Тыц

    Nested types in the same body can also access those private members.
    Ответ написан
    1 комментарий