• Как получить данные через запрос?

    Сделайте экшен, который будет отвечать за подгрузку начальных данных. Сама загрузка должна происходить не в момент создания редьюсеров, а на старте приложения. Например так:

    const store = createStore(history, client, initialState)
    
    store.dispatch(appActions.loadInitialData())
    
    render((
      <Provider store={store}>
        <Router history={finalHistory}>
          {routes}
        </Router>
      </Provider>
    ), reactRootElement)


    А в loadInitialData уже загружайте данные через ajax, например:

    function loadInitialData() {
      return dispatch => axios
        .get(`${apiPrefix}/entities`)
        .then(entities => dispatch(saveEntities(entities)))
    }


    Пример очень общий, но суть, надеюсь, ясна.

    PS не забудьте thunk middleware
    Ответ написан
    Комментировать
  • Как часто используются дескрипторы, декораторы и bind, call, apply?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Обо всем по порядку

    Дескрипторы - так понимаю речь идет о дескрипторах свойств объекта. Вещь крайне полезная, позволяющая задать поведение свойству, сделав его не перечисляемым или, например, только для чтения, а так же можно задать функции getter/setter, которые будут вызываться при чтении/записи свойства. Используется довольно часто.

    Декораторы функций. Позволяют избежать дублирования кода. Допустим, подключаете Вы некую библиотеку, в которой есть некоторая функция, Вам необходимая. Пусть она делает некое действие А, но Вам регулярно нужна последовательность действий А и Б. Тогда Вы пишите над этой функцией обертку, выполняющий эту последовательность, и уже вместо библиотечной функции + действие Б используете везде свою обертку. А вот если у Вас таких оберток с действием Б довольно много, то уже нужен декоратор, который позволит создавать такие обертки для любой функции. Используется как правило в крупных проектах, так как снижает вероятность ошибок.

    bind - по сути является декоратором встроенным в язык. Позволяет привязать к функции контекст и начальные аргументы. Используется постоянно, особенно в случае передачи функции во внешний код.

    call и apply позволяют вызвать функцию с нужным контекстом, разница в том что apply принимает 2 аргумента - контекст и массиво-подобный объект содержащий аргументы, а call принимает произвольное число аргументов: 1й - контекст, последующие передаются как аргументы функции. Используется постоянно.

    Карринг. Хоть и используется не так часто, но бывает весьма полезным инструментом. По сути цепочки промисов построены на принципах карринга, только не функций, а объектов.

    Ну и напоследок, конструкция var self = this; позволяющая сохранить контекст в замыкании уже потихоньку уходит в прошлое, благодаря стрелочным функциям из es2015
    Ответ написан
    1 комментарий
  • Как осуществить связь между отдельными reducers в redux?

    Зависимостей, как правило нет. Но можно сделать вложенные редьюсеры:
    const myReducer = combineReducers({ connectedReducer1, connectedReducer2 })

    PS для форм используйте redux-form.

    UPD1 При этом вы можете вручную вызывать вложенные редьюсеры:

    function combinedReducer(state = initialState, action = {}) {
      switch(action.type) {
        case SOME_COMPLEX_ACTION:
          return {
             ...state,
             someProp: someOtherReducer(state.someProp, { type: OTHER_ACTION, payload: action.payload.something })
          }
        default:
          return {
             ...state,
             someProp: someOtherReducer(state.someProp)
          }
      }
    }
    Ответ написан
    1 комментарий
  • Онлайн-ресурс для создания схематической разметки страниц для дизайнера

    fear86
    @fear86
    Developer
    Мне нравится www.gliffy.com
    Ответ написан
    Комментировать
  • Онлайн-ресурс для создания схематической разметки страниц для дизайнера

    @m-haritonov
    Ищите по запросам «mockups» и «sketchy». Несколько результатов:
    balsamiq.com/products/mockups/
    moqups.com/
    mockups.me/
    Ответ написан
    Комментировать
  • Какая разница между jQuery .bind() .live() .delegate() и .on()?

    zimorodok
    @zimorodok
    bind — навешивает обработчик непосредственно на элемент (когда тот есть в DOM-е). При удалении элемента так-же удаляется.

    live — навешивает обработчик на document, используется делегирование (всплытие событий). Позволяет создать обработчик до того, как элемент появится в DOM-е. При удалении элумента обработчик не удаляется, а просто перестает срабатывать. Если в DOM снова вставить элемент, подходящий под селектор, обработчик снова отработает.

    delegate — точно так-же, как и live, использует делегирование, только явно указывается узел, на который навешивается обработчик. (удобно для разработки модулей, или как их еще называют, виджетов)

    on — объединяет возможности как bind, так и delegate (зависит от формы использования). Как верно было замечено, остальные методы deprecated и в новых версиях поддерживаться не будут. Елиный метод введен для того, чтобы не возникали вопросы какой метод использовать.
    Ответ написан
    Комментировать