From 171b762775b4aab7ec62daac1e936e1ac8acbdf1 Mon Sep 17 00:00:00 2001 From: elcodex Date: Tue, 14 May 2019 08:54:02 +0300 Subject: [PATCH] [Rus] Improved the translation of Redux challenges (part 3) (#34353) * Improved the translation * Improved the translation * Improved the translation * Improved the translation * Improved the translation --- .../combine-multiple-reducers.russian.md | 10 +++---- .../register-a-store-listener.russian.md | 17 ++++++------ ...ment-to-handle-multiple-actions.russian.md | 22 ++++++++-------- .../use-const-for-action-types.russian.md | 26 +++++++++---------- .../write-a-counter-with-redux.russian.md | 24 ++++++++--------- 5 files changed, 49 insertions(+), 50 deletions(-) diff --git a/curriculum/challenges/russian/03-front-end-libraries/redux/combine-multiple-reducers.russian.md b/curriculum/challenges/russian/03-front-end-libraries/redux/combine-multiple-reducers.russian.md index 10b882814e..f060579490 100644 --- a/curriculum/challenges/russian/03-front-end-libraries/redux/combine-multiple-reducers.russian.md +++ b/curriculum/challenges/russian/03-front-end-libraries/redux/combine-multiple-reducers.russian.md @@ -8,21 +8,21 @@ localeTitle: Объединение нескольких редукторов --- ## Description -
Когда состояние вашего приложения начинает становиться более сложным, может возникнуть соблазн разделить состояние на несколько частей. Вместо этого запомните первый принцип Redux: все состояние приложения хранится в одном объекте состояния в хранилище. Поэтому Redux обеспечивает композицию редуктора как решение для сложной модели состояния. Вы определяете несколько редукторов для обработки разных частей состояния вашего приложения, а затем объединяете эти редукторы в один редуктор корня. Корневой редуктор затем передается в метод Redux createStore() . Чтобы объединить несколько редукторов вместе, Redux предоставляет метод combineReducers() . Этот метод принимает объект как аргумент, в котором вы определяете свойства, которые связывают ключи с конкретными функциями редуктора. Имя, которое вы передаете клавишам, будет использоваться Redux как имя связанного участка состояния. Как правило, хорошей практикой является создание редуктора для каждой части состояния приложения, когда они являются определенными или уникальными в некотором роде. Например, в приложении для заметок с аутентификацией пользователя один редуктор может обрабатывать аутентификацию, а другой - текст и заметки, которые пользователь отправляет. Для такого приложения мы можем написать метод combineReducers() следующим образом:
const rootReducer = Redux.combineReducers ({
auth: authenticationReducer,
примечания: примечанияReducer
});
Теперь ключевые notes будут содержать все состояние, связанное с нашими заметками и обрабатываемое нашими notesReducer . Так можно создать несколько редукторов для управления более сложным состоянием приложения. В этом примере состояние, хранящееся в хранилище Redux, будет тогда единственным объектом, содержащим свойства auth и notes .
+
Когда состояние вашего приложения начинает становиться более сложным, может возникнуть соблазн разделить состояние на несколько частей. Вместо этого запомните первый принцип Redux: все состояние приложения хранится в одном объекте состояния в хранилище. Поэтому Redux предоставляет композицию редукторов как решение для сложной модели состояния. Вы определяете несколько редукторов для обработки разных частей состояния вашего приложения, а затем объединяете эти редукторы в один корневой редуктор. Корневой редуктор затем передается в метод Redux createStore() . Чтобы объединить несколько редукторов вместе, в Redux есть метод combineReducers() . Этот метод принимает объект как аргумент, в котором вы определяете свойства, которые связывают ключи с конкретными функциями редуктора. Имя, которое вы задаёте ключам, будет использоваться Redux как имя для связанной части состояния. Как правило, хорошей практикой является создание редуктора для каждой части состояния приложения, когда они являются особенными или уникальными в некотором роде. Например, в приложении для заметок с аутентификацией пользователя один редуктор может обрабатывать аутентификацию, а другой - текст и заметки, которые пользователь отправляет. Для такого приложения мы можем написать метод combineReducers() следующим образом:
const rootReducer = Redux.combineReducers ({
auth: authenticationReducer,
notes: notesReducer
});
Теперь ключ notes будет содержать все состояние, связанное с нашими заметками и обрабатываемое нашим notesReducer . Так можно создать несколько редукторов для управления более сложным состоянием приложения. В этом примере состояние, находящееся в хранилище Redux, будет тогда единственным объектом, содержащим свойства auth и notes .
## Instructions -
В counterReducer() имеются функции counterReducer() и authReducer() , а также хранилище Redux. Завершите запись функции rootReducer() с помощью Redux.combineReducers() . Назначьте counterReducer ключу с именем count и authReducer на ключ с именем auth .
+
В редакторе кода заданы функции counterReducer() и authReducer() , а также хранилище Redux. Завершите написание функции rootReducer() , используя Redux.combineReducers() . Назначьте counterReducer ключу с именем count и authReducer - ключу с именем auth .
## Tests
```yml tests: - - text: counterReducer должен увеличивать и counterReducer state . + - text: counterReducer должен увеличивать и уменьшать state . testString: 'assert((function() { const initalState = store.getState().count; store.dispatch({type: INCREMENT}); store.dispatch({type: INCREMENT}); const firstState = store.getState().count; store.dispatch({type: DECREMENT}); const secondState = store.getState().count; return firstState === initalState + 2 && secondState === firstState - 1 })(), "The counterReducer should increment and decrement the state.");' - text: authReducer должен переключать state authenticated между true и false . testString: 'assert((function() { store.dispatch({type: LOGIN}); const loggedIn = store.getState().auth.authenticated; store.dispatch({type: LOGOUT}); const loggedOut = store.getState().auth.authenticated; return loggedIn === true && loggedOut === false })(), "The authReducer should toggle the state of authenticated between true and false.");' - - text: 'Магазин state должно иметь два ключа: count , который содержит номер и auth , который содержит объект. Объект auth должен иметь свойство authenticated , которое содержит логическое значение.' + - text: 'Хранилище state должно иметь два ключа: count , который содержит число и auth , который содержит объект. Объект auth должен иметь свойство authenticated , которое содержит логическое значение.' testString: 'assert((function() { const state = store.getState(); return typeof state.auth === "object" && typeof state.auth.authenticated === "boolean" && typeof state.count === "number" })(), "The store state should have two keys: count, which holds a number, and auth, which holds an object. The auth object should have a property of authenticated, which holds a boolean.");' - text: 'rootReducer должен быть функцией, которая объединяет counterReducer и authReducer .' testString: 'getUserInput => assert((function() { const noWhiteSpace = getUserInput("index").replace(/\s/g,""); return typeof rootReducer === "function" && noWhiteSpace.includes("Redux.combineReducers") })(), "The rootReducer should be a function that combines the counterReducer and the authReducer.");' @@ -69,7 +69,7 @@ const authReducer = (state = {authenticated: false}, action) => { } }; -const rootReducer = // define the root reducer here +const rootReducer = // определите здесь корневой редуктор const store = Redux.createStore(rootReducer); diff --git a/curriculum/challenges/russian/03-front-end-libraries/redux/register-a-store-listener.russian.md b/curriculum/challenges/russian/03-front-end-libraries/redux/register-a-store-listener.russian.md index 924db9cce5..2558f27dd5 100644 --- a/curriculum/challenges/russian/03-front-end-libraries/redux/register-a-store-listener.russian.md +++ b/curriculum/challenges/russian/03-front-end-libraries/redux/register-a-store-listener.russian.md @@ -4,14 +4,14 @@ title: Register a Store Listener challengeType: 6 isRequired: false videoUrl: '' -localeTitle: Зарегистрировать слушателя магазина +localeTitle: Регистрация слушателя хранилища --- ## Description -
Другой метод, к store.subscribe() вас есть доступ к объекту store Redux, - store.subscribe() . Это позволяет вам подписывать функции слушателя в хранилище, которые вызывается всякий раз, когда действие отправляется против магазина. Одним из простых способов использования этого метода является подписка функции на ваш магазин, которая просто регистрирует сообщение каждый раз, когда принимается действие, и хранилище обновляется.
+
Другой метод, к которому у вас есть доступ из Redux store, - это store.subscribe() . Он позволяет вам подписать функции слушателя к хранилищу, которые будут вызываться всякий раз, когда действие отправляется в хранилище. Одним из простых способов использования этого метода является подписка функции на ваше хранилище, которая просто регистрирует сообщение каждый раз, когда принимается действие, и хранилище обновляется.
## Instructions -
Написать функцию обратного вызова , который увеличивает глобальную переменную count каждый раз , когда магазин принимает действие, и передать эту функцию в к store.subscribe() метода. Вы увидите, что store.dispatch() вызывается три раза подряд, каждый раз непосредственно передавая объект действия. Посмотрите вывод консоли между диспетчерами действий, чтобы увидеть обновления.
+
Написать функцию обратного вызова, которая увеличивает значение глобальной переменной count каждый раз, когда хранилище принимает действие, и передать эту функцию в метод store.subscribe() . Вы увидите, что store.dispatch() вызывается три раза подряд, каждый раз непосредственно передавая объект действия. Посмотрите вывод консоли между отправками действия, чтобы увидеть, что обновления происходят.
## Tests
@@ -20,11 +20,10 @@ localeTitle: Зарегистрировать слушателя магазин tests: - text: Отправка действия ADD в хранилище должна увеличивать состояние на 1 . testString: 'assert((function() { const initialState = store.getState(); store.dispatch({ type: "ADD" }); const newState = store.getState(); return newState === (initialState + 1); })(), "Dispatching the ADD action on the store should increment the state by 1.");' - - text: 'Должна быть функция прослушивателя, подписанная на магазин, используя store.subscribe .' + - text: 'Должна быть функция слушателя, подписанная на хранилище, используя store.subscribe .' testString: 'getUserInput => assert(getUserInput("index").includes("store.subscribe("), "There should be a listener function subscribed to the store using store.subscribe.");' - - text: Обратный вызов store.subscribe также должен увеличивать глобальную переменную count при обновлении хранилища. + - text: Обратный вызов в store.subscribe также должен увеличивать значение глобальной переменной count при обновлении хранилища. testString: 'assert(store.getState() === count, "The callback to store.subscribe should also increment the global count variable as the store is updated.");' - ```
@@ -48,12 +47,12 @@ const reducer = (state = 0, action) => { const store = Redux.createStore(reducer); -// global count variable: +// глобальная переменная счётчика: let count = 0; -// change code below this line +// измените код ниже этой линии -// change code above this line +// измените код выше этой линии store.dispatch({type: ADD}); console.log(count); diff --git a/curriculum/challenges/russian/03-front-end-libraries/redux/use-a-switch-statement-to-handle-multiple-actions.russian.md b/curriculum/challenges/russian/03-front-end-libraries/redux/use-a-switch-statement-to-handle-multiple-actions.russian.md index 96809671b4..76bd68a218 100644 --- a/curriculum/challenges/russian/03-front-end-libraries/redux/use-a-switch-statement-to-handle-multiple-actions.russian.md +++ b/curriculum/challenges/russian/03-front-end-libraries/redux/use-a-switch-statement-to-handle-multiple-actions.russian.md @@ -4,31 +4,31 @@ title: Use a Switch Statement to Handle Multiple Actions challengeType: 6 isRequired: false videoUrl: '' -localeTitle: Используйте инструкцию Switch для обработки нескольких действий +localeTitle: Использование инструкции Switch для обработки нескольких действий --- ## Description -
Вы можете сказать магазину Redux, как обрабатывать несколько типов действий. Скажите, что вы управляете аутентификацией пользователя в своем хранилище Redux. Вы хотите иметь представление состояния, когда пользователи вошли в систему и когда они вышли из системы. Вы представляете это с единственным объектом состояния с authenticated свойством. Вам также нужны создатели действий, которые создают действия, соответствующие логину пользователя и пользователю, а также сами объекты действий.
+
Вы можете сказать хранилищу Redux, как обрабатывать несколько типов действий. Предположим, что вы управляете аутентификацией пользователя в своем хранилище Redux. Вы хотите,чтобы у вас было состояние, показывающее когда пользователи вошли в систему и когда они вышли из системы. Вы представляете это единственным объектом состояния со свойством authenticated. Вам также нужны создатели действий, которые создают действия, отвечающие за вход пользователя и за выход пользователя из системы, а также сами объекты действий.
## Instructions -
В редакторе кода есть создатели хранилища, действия и действия. Заполните функцию reducer для обработки нескольких действий аутентификации. Используйте оператор switch JavaScript в reducer чтобы реагировать на различные события действий. Это стандартный образец при записи редукторов Redux. Оператор switch должен переключать action.type и возвращать соответствующее состояние аутентификации. Примечание. На этом этапе не беспокойтесь о неизменности состояния, поскольку в этом примере оно мало и просто. Для каждого действия вы можете вернуть новый объект - например {authenticated: true} . Кроме того, не забудьте написать случай по default в вашем операторе switch, который возвращает текущее state . Это важно, потому что, как только ваше приложение имеет несколько редукторов, все они запускаются в любое время, когда происходит отправка действий, даже если действие не связано с этим редуктором. В таком случае вы хотите убедиться, что вы вернете текущее state .
+
В редакторе кода для вас уже описаны хранилище, действия и создатели действия. Заполните функцию reducer для обработки различных действий аутентификации. Используйте JavaScript оператор switch в reducer чтобы реагировать на различные события действий. Это стандартный паттерн при описание редукторов Redux. Оператор switch должен переключаться между action.type и возвращать соответствующее состояние аутентификации. Примечание. На этом этапе не беспокойтесь о неизменности состояния, поскольку это маленький и простой пример. Для каждого действия вы можете вернуть новый объект - например, {authenticated: true} . Кроме того, не забудьте написать случай по умолчанию default в вашем операторе switch, который возвращает текущее state . Это важно, потому что когда в вашем приложении несколько редукторов, все они запускаются, когда происходит отправка действий, даже если действие не связано с этим редуктором. В таком случае вы хотите убедиться, что вы вернете текущее state .
## Tests
```yml tests: - - text: 'Вызов функции loginUser должен вернуть объект с свойством type, установленным в строку LOGIN .' + - 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 .' + - text: 'Вызов функции logoutUser должен вернуть объект со свойством type, установленным в строковое значение 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 .' + - 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 . + - text: Отправка 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 . + - text: Отправка 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 . + - 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.");' ``` @@ -46,9 +46,9 @@ const defaultState = { }; const authReducer = (state = defaultState, action) => { - // change code below this line + // измените код ниже этой линии - // change code above this line + // измените код выше этой линии }; const store = Redux.createStore(authReducer); diff --git a/curriculum/challenges/russian/03-front-end-libraries/redux/use-const-for-action-types.russian.md b/curriculum/challenges/russian/03-front-end-libraries/redux/use-const-for-action-types.russian.md index 1f5a88e71f..b5a7b4c449 100644 --- a/curriculum/challenges/russian/03-front-end-libraries/redux/use-const-for-action-types.russian.md +++ b/curriculum/challenges/russian/03-front-end-libraries/redux/use-const-for-action-types.russian.md @@ -4,35 +4,35 @@ title: Use const for Action Types challengeType: 6 isRequired: false videoUrl: '' -localeTitle: Использовать const для типов действий +localeTitle: Использование констант для типов действий --- ## Description -
Общей практикой при работе с Redux является назначение типов действий как констант только для чтения, а затем ссылки на эти константы везде, где они используются. Вы можете реорганизовать код, с которым работаете, чтобы написать типы действий как объявления const .
+
Общей практикой при работе с Redux является присваивать типы действий константам, а затем ссылаться на эти константы везде, где они используются. Вы можете реорганизовать код, с которым работаете, чтобы описать типы действий константами const .
## Instructions -
Объявите LOGIN и LOGOUT как const значения и назначьте их в 'LOGIN' и 'LOGOUT' строк соответственно. Затем отредактируйте authReducer() и создателей действия, чтобы ссылаться на эти константы вместо строковых значений. Примечание. Обычно принято писать константы во всех прописных буквах, и это стандартная практика в Redux.
+
Объявите LOGIN и LOGOUT как константы const и присвойте им строковые значения 'LOGIN' и 'LOGOUT' соответственно. Затем отредактируйте authReducer() и создателей действия, чтобы они ссылались на эти константы вместо строковых значений. Примечание. Обычно принято писать константы прописными буквами, и это стандартная практика в Redux.
## Tests
```yml tests: - - text: Вызов функции loginUser должен вернуть объект с свойством type установленным в строку LOGIN . + - 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 должен вернуть объект с свойством type установленным в строку LOGOUT . + - text: Вызов функции logoutUser должен вернуть объект со свойством type , установленным в строку LOGOUT . testString: 'assert(logoutUser().type === "LOGOUT", "Calling the function logoutUser should return an object with type property set to the string LOGOUT.");' - - text: Магазин должен быть инициализирован объектом с идентификатором login установленным в значение false . + - text: Хранилище должно быть инициализировано объектом с идентификатором login , установленным в значение false . testString: 'assert(store.getState().authenticated === false, "The store should be initialized with an object with property login set to false.");' - - text: Dispatching loginUser должен обновить свойство login в состоянии store до true . + - text: Отправка loginUser должна обновить свойство login в состоянии хранилища до 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 login property in the store state to true.");' - - text: Dispatching logoutUser должен обновить свойство login в состоянии store до false . + - text: Отправка logoutUser должна обновить свойство login в состоянии хранилища до 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 login property in the store state to false.");' - - text: Функция authReducer должна обрабатывать несколько типов действий с помощью оператора switch. + - text: Функция authReducer должна обрабатывать разные типы действий с помощью оператора switch. testString: 'getUserInput => assert((function() { return typeof authReducer === "function" && 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.");' - - text: LOGIN и LOGOUT должны быть объявлены как значения const и должны быть назначены строки LOGIN и LOGOUT . + - text: LOGIN и LOGOUT должны быть объявлены как значения const и должны быть проинициализированы строками LOGIN и LOGOUT . testString: 'getUserInput => assert((function() { const noWhiteSpace = getUserInput("index").toString().replace(/\s/g,""); return (noWhiteSpace.includes("constLOGIN=\"LOGIN\"") || noWhiteSpace.includes("constLOGIN="LOGIN"")) && (noWhiteSpace.includes("constLOGOUT=\"LOGOUT\"") || noWhiteSpace.includes("constLOGOUT="LOGOUT"")) })(), "LOGIN and LOGOUT should be declared as const values and should be assigned strings of LOGINand LOGOUT.");' - - text: Создатели действия и редуктор должны ссылаться на константы LOGIN и LOGOUT . + - text: Создатели действий и редуктор должны ссылаться на константы LOGIN и LOGOUT . testString: 'getUserInput => assert((function() { const noWhiteSpace = getUserInput("index").toString().replace(/\s/g,""); return noWhiteSpace.includes("caseLOGIN:") && noWhiteSpace.includes("caseLOGOUT:") && noWhiteSpace.includes("type:LOGIN") && noWhiteSpace.includes("type:LOGOUT") })(), "The action creators and the reducer should reference the LOGIN and LOGOUT constants.");' ``` @@ -45,9 +45,9 @@ tests:
```jsx -// change code below this line +// измените код ниже этой линии -// change code above this line +// измените код выше этой линии const defaultState = { authenticated: false diff --git a/curriculum/challenges/russian/03-front-end-libraries/redux/write-a-counter-with-redux.russian.md b/curriculum/challenges/russian/03-front-end-libraries/redux/write-a-counter-with-redux.russian.md index 4b3cb907fb..6c07668cbf 100644 --- a/curriculum/challenges/russian/03-front-end-libraries/redux/write-a-counter-with-redux.russian.md +++ b/curriculum/challenges/russian/03-front-end-libraries/redux/write-a-counter-with-redux.russian.md @@ -4,14 +4,14 @@ title: Write a Counter with Redux challengeType: 6 isRequired: false videoUrl: '' -localeTitle: Напишите счетчик с Redux +localeTitle: Написание счетчика с помощью Redux --- ## Description -
Теперь вы узнали все основные принципы Redux! Вы видели, как создавать действия и создавать действия, создавать хранилище Redux, отправлять ваши действия против магазина и разрабатывать обновления состояния с помощью чистых редукторов. Вы даже видели, как управлять сложным состоянием с композицией редуктора и обрабатывать асинхронные действия. Эти примеры упрощены, но эти концепции являются основными принципами Redux. Если вы их хорошо понимаете, вы готовы приступить к созданию своего собственного приложения Redux. Следующие проблемы охватывают некоторые детали, касающиеся неизменности state , но сначала рассмотрим все, что вы изучили до сих пор.
+
Теперь вы узнали все основные принципы Redux! Вы видели, как создавать действия и создателей действия, создавать хранилище Redux, отправлять ваши действия в хранилище и разрабатывать обновления состояния с помощью чистых редукторов. Вы даже видели, как управлять сложным состоянием с композицией редукторов и обрабатывать асинхронные действия. Эти примеры упрощены, но эти концепции являются основными принципами Redux. Если вы их хорошо понимаете, вы готовы приступить к созданию своего собственного приложения Redux. Следующие упражнения охватывают некоторые детали, касающиеся неизменности state , но сначала рассмотрим все, что вы изучили до сих пор.
## Instructions -
В этом уроке вы будете использовать простой счетчик с Redux с нуля. Основы представлены в редакторе кода, но вам нужно будет заполнить детали! Используйте имена, которые предоставляются и определяют incAction и decAction создателей действий, в counterReducer() , INCREMENT и DECREMENT типы действий, и , наконец, Redux store . После того, как вы закончите , вы должны быть в состоянии направить INCREMENT или DECREMENT действия для увеличения или уменьшения состояния проводится в store . Удачи в создании вашего первого приложения Redux!
+
В этом уроке вы будете реализовывать простой счетчик с помощью Redux с нуля. Основы представлены в редакторе кода, но вам нужно будет заполнить детали! Используйте имена, которые предоставлены и опишите создателей действий incAction и decAction , редуктор counterReducer() , типы действий INCREMENT и DECREMENT , и, наконец, Redux хранилище store . После того, как вы закончите , вы должны смочь отправить действия INCREMENT или DECREMENT для увеличения или уменьшения состояния в хранилище store . Удачи в создании вашего первого приложения Redux!
## Tests
@@ -22,11 +22,11 @@ tests: testString: 'assert(incAction().type ===INCREMENT, "The action creator incAction should return an action object with type equal to the value of INCREMENT");' - text: Создатель действия decAction должен возвращать объект действия с type равным значению DECREMENT testString: 'assert(decAction().type === DECREMENT, "The action creator decAction should return an action object with type equal to the value of DECREMENT");' - - text: Магазин Redux должен инициализировать с state 0. + - text: Хранилище Redux должно инициализироваться состоянием state равным 0. testString: 'assert(store.getState() === 0, "The Redux store should initialize with a state of 0.");' - - text: Dispatching incAction в магазине Redux должен увеличивать state на 1. + - text: Отправка incAction в хранилище Redux должна увеличивать state на 1. testString: 'assert((function() { const initialState = store.getState(); store.dispatch(incAction()); const incState = store.getState(); return initialState + 1 === incState })(), "Dispatching incAction on the Redux store should increment the state by 1.");' - - text: Отправка decAction в хранилище Redux должна decAction state на 1. + - text: Отправка decAction в хранилище Redux должна уменьшать state на 1. testString: 'assert((function() { const initialState = store.getState(); store.dispatch(decAction()); const decState = store.getState(); return initialState - 1 === decState })(), "Dispatching decAction on the Redux store should decrement the state by 1.");' - text: counterReducer должен быть функцией testString: 'assert(typeof counterReducer === "function", "counterReducer should be a function");' @@ -41,16 +41,16 @@ tests:
```jsx -const INCREMENT = null; // define a constant for increment action types -const DECREMENT = null; // define a constant for decrement action types +const INCREMENT = null; // определите константу для типа действия увеличения +const DECREMENT = null; // определите константу для типа действия уменьшения -const counterReducer = null; // define the counter reducer which will increment or decrement the state based on the action it receives +const counterReducer = null; // определите редуктор счётчика, который будет увеличивать или уменьшать состояние в зависимости от переданного действия -const incAction = null; // define an action creator for incrementing +const incAction = null; // определите создателя действия для увеличения -const decAction = null; // define an action creator for decrementing +const decAction = null; // определите создателя действия для уменьшения -const store = null; // define the Redux store here, passing in your reducers +const store = null; // определите хранилище Redux, передав в него ваши редукторы ```