2016-12-11 8 views
4

Я продолжаю читать, что для обработки побочных эффектов я должен использовать сократительную или саксовую саги. Почему бы просто не использовать создатели действий, как, что для отправки нескольких действий:Зачем использовать редукцию-сундук или сапса-редукцию для выборки?

function loadProductActionCreator(dispatch) { 
    dispatch({ 
    type: 'load_product', 
    }) 
    fetch('api/product').then(
    function (r) { 
     return r.json(); 
    } 
) 
    .then(function (res) { 
    dispatch({ 
     type: 'loaded_product', 
     data: res 
    }) 
    }) 
} 

Я попробовал, и она работала (complete code). Поэтому я предполагаю, что некоторые неудобства мне не известны.

+0

Вы можете сделать это точно. Когда вас кормят созданием оберток для каждого создателя действия вручную (например, вы делаете на строках 45-47) - вы сдаетесь и принимаете decux-thunk. – zerkms

+0

, так что это единственное преимущество? избегая создания нескольких действий для такого рода задач? – sylvain

+0

Если вы проверите код redux-thunk, вы увидите, что функция, которую он экспортирует, составляет всего 4 (четыре) строки кода https://github.com/gaearon/redux-thunk/blob/master/src/index.js – zerkms

ответ

3

Вы код похож на то, что санк делает.

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

Это называется побочные эффекты. И это то, что не должно быть в действиях сокращения по умолчанию.

Но почему?

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

В большом приложении есть преимущества использования redux-saga:

  • действия предсказуемы, они просто возвращают полезную нагрузку как

    { 
        type: 'FETCH_POSTS', 
        params: { 
        category: 'programming' 
        } 
    } 
    
  • , а затем вы строите промежуточное программное обеспечение, которое будет принимать меры со всеми данными требуется для выполнения запроса к реальному API

Возможные преимущества:

  • очиститель кодового (но может быть накладными расходы на небольших приложениях)
  • разъединения «фиктивные» действий со всей необходимой информацией для выполнения запросов и фактического API промежуточного программного
  • Параметры запроса видимы непосредственно в Redux инструменты Дев
  • можно легко debounce, throttle Fetches, который может быть очень сложно с Redux-санк
  • возможно easil у комбинировать действия (ждать другого события/выборки, цепь событий)
  • Можно остановить выполнение задач

Из личного опыта, на одном проекте (больше кодовой базы) мы начали с redux-thunk, но потом нам нужно интегрировать более сложные функции, такие как дроссель и некоторые зависимости между действиями. Поэтому мы переписали все на redux-saga, и это сработало для нас.

1

Вы как бы реплицируетесь здесь. Создатель действия чистого редукса должен возвращать объект действия, который должен быть отправлен, а не отправлять само действие (см. redux doc on action creator).

Чтобы лучше понять, почему ваша техника является копией Redux-стук, посмотреть на this post от его автора