2016-07-20 3 views
2

Я использую Redux для управления состоянием моего приложения, и у меня было асинхронное действие с redux-thunk.Запуск действия с редукцией-ударом без отправки

export const login = credentials => dispatch => { 
    return doLogin(credentials).then(token => { 
     localStorage.setItem('token', token) 
     // this dispatch call was there before, but now it has gone, 
     // because it is not necessary anymore 
     // dispatch({ type: LOGIN_SUCCESS }) 
    }) 
} 

Дело в том, что теперь у меня есть действие, которое не отправляет какие-либо действия в хранилище, просто делает свою работу, о входе в систему и хранения маркера.

У вас может быть такое действие? Я не настолько уверен в этом коде, но не знаю, как сделать это лучше.

+0

Эта функция не собирается вообще ничего делать с состоянием? –

ответ

1

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

Thunkified действия в общем случае являются обходным путем для этого поведения, но в этом случае нормально иметь такое действие, потому что, хотя оно не влияет на состояние Redux через редуктор, вы используете (thunk) промежуточное программное обеспечение для выполнения побочных эффектов, а промежуточное программное обеспечение предназначено для реагирования на действия.

Тот факт, что вы спровоцировав «вверх по течению» действия, не потребляемую редуктором вниз по течению не имеет никакого значения, хотя это может быть хорошая практика, чтобы еще dispatch({ type: 'LOGIN_REQUEST' }) в начале и dispatch({ type: 'LOGIN_SUCCESS'}) в конце просто поэтому нисходящее приложение имеет способ узнать, что происходит, если он хочет что-то сделать с этим позже.

1

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

Вместо этого я отправил действие, например. LOGIN_SUCCESS с токеном, переданным в качестве своих данных. Затем выполните обработку промежуточного программного обеспечения этого типа действия - т. Е. Установите токен в локальном хранилище.

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

+0

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

+0

Я так думаю, но все же - разделенные проблемы легче рассуждать. В целом - это вопрос выбора. – WTK

Смежные вопросы