• Безопасность клиентских приложений: практические советы для Front-end разработчика
    +1
    На первом скрине фаталити из МК? :)
  • Hyperapp для беженцев с React/Redux
    +1
    Гляньте плз на такое решение (обертку над R/R) Redaction
  • Список цветовых классов Material Design Lite
    +1
    Могли бы сделать ссылку на гитхаб в статье. А на гитхабе уже сделать список классов… со стилями и тд
  • Javascript-путешествие с шестью символами
    +1
    Бывает очень весело =)

    {}[0] == 0 && 0 != {}[0] // true
    

  • Redux Action Creators. Без констант и головной боли
    +1
    Пример добавил: https://pavelivanov.github.io/redaction/
    Исходники тут: https://github.com/pavelivanov/redaction/tree/master/example
    Позже добавлю тесты
  • Redux Action Creators. Без констант и головной боли
    0
    Все, я вас, кажется, понял… вы хотите один и тотже ЭКШНТИП назначать в switch case разных редьюсеров?
  • Redux Action Creators. Без констант и головной боли
    0
    При использовании Redux вы создаете отдельно экшны и отдельно редьюсеры, они между собой никак не связаны, в экшнах вы вызываете диспатч и передаете тип вызываемого редьюсера. Чтобы вызвать 3 редьюсера придется сделать 3 диспатча.

    Что мешает тогда сделать так:

    // actions/index.js
    import actions from './redbox-actions'
    
    
    export const someAction = () => {
      actions.user.authStart()
      
      request()
        .then((result) => {
          actions.user.authSuccess(result)
          actions.user.authComplete()
        })
        .catch((err) => {
          actions.user.authError(err)
          actions.user.authComplete()
        })
      
      //...
    }
    
    export default actions
    

    Код ведь чище и его меньше, читать удобнее и поддерживать. Все понятно, откуда что берется.
    Я к тому что суть не меняется… это все теже редьюсеры… Просто теперь не нужны типы и диспатч метод. Внутри redbox, если вы посмотрите, создаются все теже комбинированные редьюсеры, просто типы для них создаются уникальные от имени файла, в котором были созданы и имени метода, которым вы его обозвали. А диспатч передается один раз в процессе инициализации и делается замыкание
  • Redux Action Creators. Без констант и головной боли
    –1
    Т.е. вы внутри одного файла экшнов хотите вызывать редьюсеры из разных файлов?

    п.с.
    К минусам необоснованным на хабре я привык… пофигу)
  • Redux Action Creators. Без констант и головной боли
    –2
    Забыл описание добавить к коду: (возможно не оч корректный пример был) т.к. внутри есть 3 состояния, то и через коннект в компонент попадают эти состояния, которые можно использовать pending — рисуем лоадер, error — рисуем ошибку, data есть — рисуем ее. И не нужно городить однотипную логику каждый раз… ну или изобретать все-таки свой велосипед прийдется чтобы не плодить код внутри файлов =/
  • Redux Action Creators. Без констант и головной боли
    –1
    Пример ваш понял, вот набросал:

    // actions/user.js
    
    export const login = createAction({
      endpoint: '/login',
      method: 'POST'
    })
    
    
    // containers/Login/index.js
    
    @connect((state) => ({
      authentication: state.user.authentication
    }))
    export default class Login extends React.Component {
      auth = () => {
        actions.auth.login({
          subset: 'authentication',
          body: {
            username,
            password
          },
          onResponse: ({ body }) => {
            // запускаем любой другой асинхронный вызов, если нужно
          }
        })
      }
    
      render() {
        const { authentication } = this.props
    
        if (authentication.pending) {
          return (
            <Loader />
          )
        }
    
        if (authentication.error) {
          return (
            <div>Authentication ERROR</div>
          )
        }
    
        return (
          <div>
            <AuthForm onSubmit={this.auth} />
          </div>
        )
      }
    }
    

    Если вы имеете ввиду что в моем случае нельзя при создании экшна построить сразу цепочку вызовов, то это относится к архитектуре и, имхо, я буду больше рад такому варианту с цепочкой асинхронных запросов нежели буду довольствоваться лапше из кода =/ К сожалению, практика показала что такой вариант в разы лучше. Есть огромный проект, в котором используется чистый Redux (примерно 400 апи запросов) и есть еще больше проект где используется подход Redbox и кода в разы меньше / чище и поддерживать в разы легче.
  • Redux Action Creators. Без констант и головной боли
    0
    А вы можете привести пример кода, пожалуйста. Минимальный чтобы понять как вы хотите построить структуру и я докажу (почти уверен) что в структуре на redbox будет меньше кода, и лишнего не будет и вызываться будут те же диспатчи (за исключением состояний запроса)
  • Redux Action Creators. Без констант и головной боли
    –1
    Спешл фо ю переделал…
  • Redux Action Creators. Без констант и головной боли
    –2
    Напишите, пожалуйста, пример что вы хотите реализовать посредством просто Redux, т.к. я не совсем понял что вы хотите написав «без изменения непосредственно addTodo».

    Если же я правильно понял и вы хотите просто изменить основное дерево state в нескольких местах при вызове одного экшна что мешает вам вызвать несколько экшн-редьюсеров? Пример в этом комментарии
  • Redux Action Creators. Без констант и головной боли
    –1
    А что неявного в моем подходе? Я не претендую на звание создателя чего-то нереального. Я делал либу в первую очередь для себя и для использования в реальном проекте и это помогло сократить код в разы. И все работает и команде удобно использовать такой подход. Redbox это не замена Redux это скорее сахар.
  • Redux Action Creators. Без констант и головной боли
    0
    Если бы вы зашли на гитхаб, то заметили бы откуда взялось название. Я пользовался либой React Toolbox. Она дает набор комонентов для реакта. Я искал название созвучное с Redux. Есть множество вариаций с начальными буквами «Red». Исходя из этого я решил что Redux Tool Box будет нормально. Потому что модуль дает набор функционала для удобной работы с Redux. Таким образом получилось название REDuxtoolBOX. А что касается красного квадратика… квадратик это Square на английском, если уж на то пошло… А Box — коробка.
  • Redux Action Creators. Без констант и головной боли
    –1
    К сожалению исправить уже не могу… написал чушь… что мешает сделать doMultipleActions обычным методом через экспорт и вызывать несколько экшнов / редьюсеров сразу? Тоже самое и с асинхроннщиной…
  • Redux Action Creators. Без констант и головной боли
    0
    мимо.
  • Redux Action Creators. Без констант и головной боли
    –3
    потому что он вызывается под капотом?
  • Redux Action Creators. Без констант и головной боли
    0
    import actions from 'core/actions'
    
    export const doMultipleActions = createAction((state, { foo, bar }) => {
      actions.reducersFolderName.setFoo(foo)
      actions.reducersFolderName.setBar(bar)
    })
    

    export const initialState = {
      foo: null,
      bar: null
    }
    
    export const setFoo = createAction((state, payload) => ({ ...state, foo: payload }))
    export const setBar = createAction((state, payload) => ({ ...state, bar: payload }))
    

    doMultipleActions({
      foo: 1,
      bar: 2
    })
    

    Это, конечно, выглядит не совсем корректно с точки зрения использования редьюсера, но работать будет как часы.
  • Redux Action Creators. Без констант и головной боли
    0
    Вы правы, спасибо за совет. Постараюсь на днях сделать подробный пример с описанием. Правда как это оформить? Как апдейт к статье?
  • Redux Action Creators. Без констант и головной боли
    –2
    Это хорошее замечание. Вы отчасти правы. Но. Что вам мешает создать редьюсер и использовать его в нескольких экшнах? Или создать экшн и в его onResponse вызывать несколько редьюсеров?
    В целом я не ушел далеко от стандартов, просто упаковал их в сахар.
  • Redux Action Creators. Без констант и головной боли
    0
    Модуль используется сейчас в реальном проекте, работает стабильно. Возможно я некорректно выразился в прошлом комментарии: имелось ввиду, что бывают частные случаи, которые (возможно, у меня такого не было) будет сложно решить используя мой модуль.
  • Redux Action Creators. Без констант и головной боли
    0
    Явной новизны самой идеи нет. Естественно такую задачу как упрощение создания редьюсеров в Redux решали и до меня. Ваш пример я посмотрел (поверхностно). В нем все равно есть намек на типы. Нет встроенного решения для экшнов, т.е. это голые редьюсеры, над которыми вам по старинке придется создавать экшены и передавать данные в созданный редьюсер… Мое решение как минимум изящнее. Что касается возможных сложностей с реализацией частных случаев при использовании Redbox, как я и писал в статья, я готов к предложениям и критике… модуль новый, сырой и нуждается в доработках (ессесно).
  • Redux Action Creators. Без констант и головной боли
    –4
    Эммм, название я не крал, не надо обвинять плз… я название выбираю по свободности в npm https://www.npmjs.com/package/redbox. Как видите оно пренадлежит мне…

    Хабр как всегда… лишь бы обосрать, а не написать по делу. Можно придраться еще к тому что я использовал 'red' в начале названия… идиотизм
  • Redux Action Creators. Без констант и головной боли
    –5
    Что вы понимаете под редьюсером? По факту обычные редьюсеры в явном виде скрыты под капотом. Если вам нужен метод для изменения state, то в статье есть пример:

    import { createAction } from 'redbox'
    
    export const initialState = {
     TODO: []
    }
    
    export const addTODO = createAction((state, payload) => {
      return { 
        ...state, 
        TODO: [ 
          ...state.TODO, 
          payload 
        ] 
      }
    })
    

    Это и есть экшн + редюсер. При вызове addTODO('do some stuff') в state добавится этот элемент.
  • Функциональная анимация в UX дизайне. Что делает ее эффективной?
    +3
    А кому нужна эта хурумба, если есть хабр? Я этой статьи не встречал, спасибо автору.
  • Как разравнять Пирамиду смерти
    0
    Ну если вы используете генераторы, то вы явно будете использовать «СО»… это можно рассматривать как подключение любого стороннего модуля, так что да — это нормально, ИМХО. А как вы рассуждаете можно и кишки async/await наружу вытащить =)
  • Как разравнять Пирамиду смерти
    0
    для генераторов заюзать что-то типа CO и будет тоже самое что с и async/await… это к слову про «это самый красивый подход»… А разве async/await поддерживается в NodeJS?
  • Удобная вставка многострочных шаблонных литералов в код на JavaScript
    +1
    это просто гениально! Как же люди сами до этого не доходят
  • Плагин для gulp — собираем файлы по кусочкам
    +1
    вот извращение… все решается одним jade'ом =/
  • Эффект Motion Blur с помощью SVG
    0
    Слайдер выглядит впечатляюще!
    Хром 41.0 модалка при открытии зависает в блюр эффекте. Меню при открывании вообще тормозит жутко =/
  • iOS-приложение от наброска до App Store
    +1
    А Вы не думали скрывать информацию о процентах и другое описание в момент, когда пользователь тянет «кнопку»? Таким образом можно увеличить шрифт добавляемого кол-ва жидкости и убрать из поля зрения лишнюю информацию.
  • Нетрадиционный обзор AngularJS
    0
    Разные фреймворки для разных целей. Вы не думали что рендеринг на клиенте в некоторых случаях это преимущество? Что мешает от сервера получать «голые» данные, а статику рендерить из $templateCache? Это можно также сказать «ложкой можно суп есть, а вот вилка почему-то не отвечает моим требованиям»…
  • Нетрадиционный обзор AngularJS
    +1
    И поэтому С++ не надо использовать?) Как я понял автор статьи ругает ангуляр за «непонятные» символы, а с С++ тогда все ок? или в чем проблема?
  • Нетрадиционный обзор AngularJS
    –1
    Простите, но, имхо, вы только и говорите «это создает сложности» постоянно, а не ищете решение. Опишите конкретную задачу, которая вам кажется нерешаемой — я и ее решу…
  • Нетрадиционный обзор AngularJS
    0
    ЗЫ сам невнимательный забыл $('img') заменить — вот верный вариант jsfiddle.net/U3pVM/12842/
  • Нетрадиционный обзор AngularJS
    0
    Что мешает сделать так с плагином: jsfiddle.net/U3pVM/12840/
  • Нетрадиционный обзор AngularJS
    0
    Иногда jQuery плагин удобнее навешивать после загрузчки данных, когда уже произошла линковка директив и отработал контроллер. Тут надо исхитряться.
    Приведите пример. Очень интересно что за случай такой где плагин не может навеситься раньше чем отработает контроллер (если я правильно понял что в это проблема)

    Статья как раз о том, чтобы делать и поддерживать сложные SPA. С простыми проблем нет, и автор специально подчеркивает этот момент.
    В данной ветке сообщений обсуждается непонимания ангуляра вцелом, я привел пример самого просто СПА как вопрос «что тут понимать?»
  • Нетрадиционный обзор AngularJS
    +5
    Так jQuery это простой набор методов и эвентов и ВСЕ. Я и спрашиваю как можно сравнивать 2 разных вещи? Это тоже самое что сказать Paint такой легкий — взял тыкнул карандаш и рисуешь, а Photoshop — там еще слои какие-то создавать надо и перемещать их можно — очень сложно.

    Я не понимаю что такого сложного в Ангуляре? Минимум понимания для нормальной работы с ним это:
    — в контроллерах храним чистые данные и обработчики
    — в директивы выносим работу с DOM элементами и навешивание тех же jQuery плагинов
    — сервисы как хранилища или конструкторы

    Самый простой вид SPA:
    — в конфиге полотно роутов
    — для каждой страницы свой контроллер
    — в контроллерах запрос данных через рест
    — в хтмл вывод данных через директивы встроенные

    Возможно сложно понять ангуляр тем кто не фронтендер? потому что кто его понимает — это рай для быстрой разработки.
  • Нетрадиционный обзор AngularJS
    –2
    Как можно сравнивать «либу-расширение» (jQuery) и полноценный фреймворк?

    Я в ангуляре разобрался за неделю. Может вы не там ищете? Я не спорю что сидя над одной документацией с офф сайта вы станете гуру быстро, но взять даже codeschool или Egghead с youtube