• Объясните простыми словами как работает Redux?

    У вас есть одно большое дерево, в котором хранится все состояние (state) приложения - это хранилище (store).
    Также у вас есть набор редьюсеров (которые скомбинированы в один общий rootReducer) - это функции, который принимают текущее состояние и действие и возвращают новое состояние:
    function someReducer(state = initialState, action) {
      // обычно выглядит как switch 
      // action - простой js-объект
      //              и обязательно имеет строковое поле type
      switch(action.type) {
        // обрабатываем действие с типом SOME_ACTION_NAME
        case 'SOME_ACTION_NAME':
          // берем какие-то данные из экшена и возвращаем новое состояние
          // при этом менять sate нельзя!
          // state.someProperty = action.newStateData <--- НЕТ!
          return { ...state, action.newStateData };
        // Если мы не обрабатываем действие - просто возвращаем старое состояние
        default:
          return state;
      }
    }


    Также есть экшен креаторы (actionCreators) - это функции, которые возвращают действие. затем это действие вещается в хранилище (диспатчится). Типичный пример:
    function someActionCreator(someArg) {
      return {
        type: 'SOME_ACTION_NAME',
        newStateData: someArg + 5, // <-- разная логика
      };
    }


    По-умолчанию в качестве экшена мы можем вернуть только простой объект, но при создании хранилища можно добавить так называемый middleWare. Это специальные функции, которые принимают все экшены из диспатча и могут передавать их дальше (при этом содержат дополнительную логику).

    Если мы хотим получить доступ к состоянию в экшен креаторе - воспользуемся thunkMiddleware:
    import thunkMiddleware from 'redux-thunk';
    
    function createStore(initialState) {
      const reducer = combineReducers(reducers);
      const finalCreateStore = applyMiddleware(
        thunkMiddleware // <-- добавляем middleware
      )(defaultCreateStore);
      return finalCreateStore(reducer, initialState);
    }


    Теперь мы можем делать так:
    function someActionCreator(someArg) {
      return (dispatch, getState) => { // <-- возвращаем фукнцию, а не объект!
        const someState = getState().reducerName;
        return {
          type: 'SOME_ACTION_NAME',
          newStateData: someArg + someState, 
        };
      };
    }


    В общем схема выглядит так:

    actionCreator --action--> dispatch --action--> middleware --action--> store --action--> reducer --> newState


    Затем мы берем из react-redux метод connect, который подключает Ваш умный компонент к хранилищу:
    import { connect } from 'react-redux';
    import { bindActionCreators } from 'redux';
    
    class MyComponent extends Component {
      static propTypes = {
        someProp: PropTypes.string.isRequired,
        someFunc: PropTypes.func.isRequired,
      };
    }
    
    // Тут мы берем из глобального состояния необходимую нам часть
    // В ownProps - свойства компонента. Тут могут быть например свойства от роутера
    function mapStateToProps(state, ownProps) {
      return {
        someProp: state.someReducer,
      };
    }
    
    function mapActionsToProps(dispatch) {
      return bindActionCreators ({ // <-- биндим все на disptach для удобства
        someFunc: (someArg) => someActionCreator(someArg + 1),
      }, dispatch);
    }
    
    export default connect(
      mapStateToProps,
      mapActionsToProps
    )(MyComponent);
    Ответ написан
    3 комментария
  • Объясните простыми словами как работает 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 комментария
  • Где найти проекты на разработку в сша?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Покопайтесь на newyork.craigslist.org
    Порассылайте резюме, там иногда попадаются стартапы, которые готовы платить цену ниже рыночной, но дают некоторую свободу в плане посещения офиса и т.д.
    Один важный момент - ваша виза должна разрешать работу в США, если у вас туристическая, то никто вас никуда не возьмет.
    Ответ написан
    4 комментария
  • Как сделать обтекание блоков независимо от высоты?

    Therapyx
    @Therapyx
    Data Science
    Если inline-block вам не подходит, то вам "придется" смотреть в сторону masonry.desandro.com или аналогам.
    Ответ написан
    Комментировать
  • Будет ли работать mysql с нагрузкой примерно триллион записей?

    syschel
    @syschel
    freelance/python/django/backend
    Проблема врятли будет в самой базе данных. Как правило всё упирается в три вещи:
    1. Сами запросы и оптимизация их.
    2. Конфигурация базы данных и самого сервера. Ну и правильно расставленные индексы.
    3. Ресурсы сервера с базой данных.
    Ответ написан
    Комментировать
  • Каждую секунду надо отнимать -1, в чем ошибка?

    @tplus
    Используйте setInterval вместо setTimeout; передавайте не вызов функции, а саму функцию в качестве первого аргумента:

    setInterval(timeRun, 1000);

    Если потребуется остановка счётчика:
    // Запускаем и одновременно запоминаем id запущенной операции
    var timerId = setInterval(timeRun, 1000);
    ...
    // Останавливаем
    clearInterval(timerId);


    Ну и не забываем прочитать документацию: https://learn.javascript.ru/settimeout-setinterval, чтобы узнать про хитрости подсчёта времени.
    Ответ написан
    2 комментария
  • Есть ли у qiwi.com тестовый сервер?

    Sassoft
    @Sassoft
    Yii developer
    В qiwi ISHOP есть возможность генерации отправки уведомлений тестовых
    Ответ написан
    Комментировать
  • Существуют ли сайты, где выкладываются исходники, заготовки и примеры популярных и хороших дизайнов сайтов?

    littleguga
    @littleguga
    Не стыдно не знать, а стыдно не интересоваться.
    Ответ написан
    Комментировать
  • Как учить Angular?

    @khmlnk
    Придумай себе какой-то простенький проект, тот же блог, или простенький твиттер, и сделай его на Ангуляре. Лично из своего опыта знаю что это наиболее эффективный метод изучения чего либо.
    Ответ написан
    Комментировать
  • Медиа-запросы. Что я делаю не так?

    Kublyakov
    @Kublyakov
    Рискну предположить, что дело в meta viewport, погугли про это.
    Попробуй добавить в head следующее:
    <meta name="viewport" content="width=device-width, initial-scale=1">
    Ответ написан
    1 комментарий
  • Почему не берет данные от api weather?

    Может быть из-за того, что в data.weather - массив?
    Попробуйте так
    alert(data.weather[0].id);
    А почему бы сразу не проверить через console.dir(data) что за данные приходят?
    Ответ написан
    1 комментарий
  • Существует ли инструмент для тестирования верстки сайта?

    @senselessV7
    Товарищ на ур. выше в верстке, чем ты! Ну или хотя бы такого же ур. как и ты!
    Как в школе делали, обменивались тетрадями и проверяли! Так и в верстке =) !
    Чаще всего допускаешь мелкие какие-то ошибки, которые сам уже и не заметишь ("замылен глаз")!

    ну, лично, мне помогает!
    Ответ написан
    Комментировать
  • WebAssembly заменит JS?

    Tavion
    @Tavion
    front-end developer
    Учите JS, потому что с webassembly неизвестно, что ещё получится. А во-вторых, даже если webassembly будет плотно использоваться, то это вовсе не значит, что JS куда-то исчезнет.
    Ответ написан
    1 комментарий
  • Как пропарсить сторонний сайт?

    archakov06
    @archakov06
    Frontend-разработчик (ReactJS)
    Можно и с JS. Если руки не кривые. В общем, я делал так.

    P.S: Предупреждаю, это метод для тех, кто не хочет юзать сторонние плагины и т.п.

    1. Создай PHP скрипт с таким содержанием:
    <?php echo file_get_contents($_GET['url']); ?>
    2. Далее отправляй запрос на свой скрипт такого вида:
    $.get('/script.php?url=http://site.ru',function(data){ 
      //юзай data
     });

    3. Радуйся!
    Ответ написан
    3 комментария
  • Хочется хорошо и качественно разрабатывать, но как?

    Groov3
    @Groov3
    Full stack web developer/Performance marketing
    Ну о том и речь, братан, я такой же самоучка, который на сегодняшний момент в 26 лет имеет долю (33%) исключительно своими силами в проекте суммарной стоимостью минимум в 5 млн евро, если я захочу её когда-нибудь продать. Но чтобы ты понимал, я запустил свой проект в 9 лет, в 1998 году, и развиваю его и сегодня, в 2015. Стремись к этому (постоянному проекту на всю WEB-карьеру, параллельному с другой деятельностью), если ты хочешь не обращаясь к ученым мужам своей головой в 26 лет сделать не один миллион долларов, причем для меня это ничем не удивившее меня только начало моей продуктивной жизни. Все своё остальное время, до этого сегодняшнего момента, мой проект был неоценен инвесторами, а сейчас мне готовы сотни тысяч баксов дать под мое слово без обязательств, если тебя интересуют возможности. И да, я давно читал те книги, которые ты тут раскопал, если это имеет значение.

    P.S. Первый сайт я вообще в 95 запустил, это было время! Прикинь, CSS еще не существовало :)).
    Ответ написан
    3 комментария
  • Из верстальщика во фронт-ендера, какие технологии изучать в дальнейшем?

    Teol
    @Teol
    Мобильный разработчик @OK.ru
    HTML, CSS – база для верстальщика
    Желательно интересоваться UIX частью, тоесть как делать "человекоудобно", что не всегда красиво в коде.

    Переходим во фронтенд:
    JQ (?) - надобность его падает пропорционально написанным велосипедам по работе с домом, анимациями и пониманием Ajax.
    EcmaScript (чистый js, он же "ванилла", но боже упаси произносить это вслух в приличном месте) + паттерны программирования – я бы выделил это все двойным болдом и тройным подчеркиванием. Это база фронтендера.
    Немного bash-а для терминала.
    NodeJS – суть тот же JS, но с привкусом бэкенда, полезно для понимания, как ваши странички вообще доставляются пользователю, какие самые банальные проблемы это в себе таит, и снова понятнее, как работает Ajax.
    Идем дальше и глубже –Stylus | LESS | SASS - препроцессоры, лучше уже хорошо владеть нативным CSS, пониманием атомарного дизайна, модульности и тп. Ощущения от использования словно получил суперсилу для верстальщика, хорошо сочетается с общим пониманием программрования. Есть еще постпроцессоры – их суть в том, что они работают с готовым кодом, когда препроцессоры компилируются в тот самый "готовый" код.
    Шаблонизаторы разметки – Mustache, Handlebars, Jade, EJS, React.

    Упрощаем работу:
    GIT – система версионирвоания – порядок в работе и бекапы. Качественный левелап даже для команды из одного.
    Сборщики Gulp, Grunt, ... и их плагины + пакетные менеджеры (NPM, Bower, ...) - автоматизация тех действий которые набили оскомину, сборка проекта, автоматическая генерация стилей из препроцессора, сборка бандлов, минификация и прочая томуподобная рутина (в которой, однако, не вредно по началу натереть мозолей)

    Чувствуем себя крутым:
    Учим MV* – Ember, Angular, Knockout
    Фреймворки вроде d3.js и работа с канвасом.

    Когда более менее освоетесь с JS:
    Попробовать поучить С++, Java, ... – это не так важно что, к чему душа ляжет. Для общего развития и понмиания программирования.
    Ответ написан
    Комментировать
  • Существует ли книга для новичка, в которой показывают разработку реального проекта?

    printf
    @printf
    Ем детей.
    Я такую книжку однажды написал: https://www.packtpub.com/application-development/k...

    Там рассматриваются маленькие программы для десктопа и Андроида, разработка на питоне с нуля. Пытался по дороге всё подробно объяснить, не знаю насколько удачно.
    Ответ написан
    2 комментария
  • Как нарисовать правильный круг на canvas?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    но при сохранении рисунка, рендерит правильный круг.

    Канвас нужно тянуть не стилями, а через задание width и height
    Ответ написан
    Комментировать
  • Из верстальщика во фронт-ендера, какие технологии изучать в дальнейшем?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    0) Ванилла js это и есть обычный js.
    1) Начинать надо с одновременного изучения ваниллы и jQuery. По ванилле будете читать книги и всякие статьи, типа как работают замыкания, this, hoisting и так далее. А на jQuery вы собственно будете писать код, который будет что-то, да делать. Никто вам конечно не мешает забить на jQuery и по хардкору угарать только по ванильному жсу, но с огромной вероятностью, вместо того чтобы как то реально практиковаться в написании кода и выполнении каких-то простых задач, вы будете биться головой о стену, ибо для начинающего, работа с DOM (а только и этим можно заниматься поначалу) в ванилле это настоящая пытка. Очень важно пилить много велосипедов.
    2) Параллельно прокачиваете css. Там просто поле непаханных возможностей и фишек. Со временем скорее всего придет понимание того, что чего то в обычном css не хватает. Тогда и начнете юзать препроцессоры. Можно конечно и сейчас сразу начать, но я не уверен что от этого будет хоть какая-та польза (а вот риск начать юзать вложенность в full-retard mode имеется).
    3) Как только начнете писать хоть какой-то вменяемый js или юзать css с препроцессорами, тогда и придет пора автоматизации фронтэнда. Галпы, автопрефиксеры, склеивание/миницирование стилей/js и все такое. Об этом пункте вообще можно будет не париться долгое время, ибо все ваши задачи будут решаться установкой какого-нибудь генератора yeomana с маджонгом и гейшами.
    4) Фрейморвки. Ангулары, реакты, эмберы и так далее. Будете их изучать на основе статей и пет-проджектов, ибо на нормальную работу, где эти самые фрейморвки применяют, с 90% вероятностью не возьмут без опыта владения ими. Учить их все естественно не надо. Достаточно хорошенько покопаться в 1-2, чтобы понять принципы работы основных частей.
    4 пункт может с легкостью идти сразу за вторым, если вас больше интересует копание в жсе, и не особо интересно представление. Параллельно со всем перечисленным изучите стайлгайды, методолгии, модульные системы и все подобные вещи, которые необходимы для написания приличного кода.
    Ответ написан
    Комментировать