--- id: 5a24c314108439a4d4036151 title: Use a Switch Statement to Handle Multiple Actions challengeType: 6 isRequired: false videoUrl: '' localeTitle: Используйте инструкцию Switch для обработки нескольких действий --- ## Description
Вы можете сказать магазину Redux, как обрабатывать несколько типов действий. Скажите, что вы управляете аутентификацией пользователя в своем хранилище Redux. Вы хотите иметь представление состояния, когда пользователи вошли в систему и когда они вышли из системы. Вы представляете это с единственным объектом состояния с authenticated свойством. Вам также нужны создатели действий, которые создают действия, соответствующие логину пользователя и пользователю, а также сами объекты действий.
## Instructions
В редакторе кода есть создатели хранилища, действия и действия. Заполните функцию reducer для обработки нескольких действий аутентификации. Используйте оператор switch JavaScript в reducer чтобы реагировать на различные события действий. Это стандартный образец при записи редукторов Redux. Оператор switch должен переключать action.type и возвращать соответствующее состояние аутентификации. Примечание. На этом этапе не беспокойтесь о неизменности состояния, поскольку в этом примере оно мало и просто. Для каждого действия вы можете вернуть новый объект - например {authenticated: true} . Кроме того, не забудьте написать случай по default в вашем операторе switch, который возвращает текущее state . Это важно, потому что, как только ваше приложение имеет несколько редукторов, все они запускаются в любое время, когда происходит отправка действий, даже если действие не связано с этим редуктором. В таком случае вы хотите убедиться, что вы вернете текущее state .
## Tests
```yml tests: - text: 'Вызов функции loginUser должен вернуть объект с свойством type, установленным в строку LOGIN .' testString: 'assert(loginUser().type === "LOGIN", "Calling the function loginUser should return an object with type property set to the string LOGIN.");' - text: 'Вызов функции logoutUser должен вернуть объект с свойством типа, установленным в строку LOGOUT .' testString: 'assert(logoutUser().type === "LOGOUT", "Calling the function logoutUser should return an object with type property set to the string LOGOUT.");' - text: 'Магазин должен быть инициализирован объектом с authenticated свойством, установленным на false .' testString: 'assert(store.getState().authenticated === false, "The store should be initialized with an object with an authenticated property set to false.");' - text: Dispatching loginUser должен обновить authenticated свойство в состоянии хранилища до true . testString: 'assert((function() { const initialState = store.getState(); store.dispatch(loginUser()); const afterLogin = store.getState(); return initialState.authenticated === false && afterLogin.authenticated === true })(), "Dispatching loginUser should update the authenticated property in the store state to true.");' - text: Dispatching logoutUser должен обновить authenticated свойство в состоянии хранилища до false . testString: 'assert((function() { store.dispatch(loginUser()); const loggedIn = store.getState(); store.dispatch(logoutUser()); const afterLogout = store.getState(); return loggedIn.authenticated === true && afterLogout.authenticated === false })(), "Dispatching logoutUser should update the authenticated property in the store state to false.");' - text: Функция authReducer должна обрабатывать несколько типов действий с помощью оператора switch . testString: 'getUserInput => assert( getUserInput("index").toString().includes("switch") && getUserInput("index").toString().includes("case") && getUserInput("index").toString().includes("default"), "The authReducer function should handle multiple action types with a switch statement.");' ```
## Challenge Seed
```jsx const defaultState = { authenticated: false }; const authReducer = (state = defaultState, action) => { // change code below this line // change code above this line }; const store = Redux.createStore(authReducer); const loginUser = () => { return { type: 'LOGIN' } }; const logoutUser = () => { return { type: 'LOGOUT' } }; ```
## Solution
```js // solution required ```