* feat(tools): add seed/solution restore script * chore(curriculum): remove empty sections' markers * chore(curriculum): add seed + solution to Chinese * chore: remove old formatter * fix: update getChallenges parse translated challenges separately, without reference to the source * chore(curriculum): add dashedName to English * chore(curriculum): add dashedName to Chinese * refactor: remove unused challenge property 'name' * fix: relax dashedName requirement * fix: stray tag Remove stray `pre` tag from challenge file. Signed-off-by: nhcarrigan <nhcarrigan@gmail.com> Co-authored-by: nhcarrigan <nhcarrigan@gmail.com>
56 lines
1.4 KiB
Markdown
56 lines
1.4 KiB
Markdown
---
|
||
id: 5a24c314108439a4d403614d
|
||
title: 定义一个 Redux Action
|
||
challengeType: 6
|
||
forumTopicId: 301440
|
||
dashedName: define-a-redux-action
|
||
---
|
||
|
||
# --description--
|
||
|
||
由于 Redux 是一个状态管理框架,因此更新状态是其核心任务之一。在 Redux 中,所有状态更新都由 dispatch action 触发,action 只是一个 JavaScript 对象,其中包含有关已发生的 action 事件的信息。Redux store 接收这些 action 对象,然后更新相应的状态。有时,Redux action 也会携带一些数据。例如,在用户登录后携带用户名,虽然数据是可选的,但 action 必须带有`type`属性,该属性表示此 action 的类型。
|
||
|
||
我们可以将 Redux action 视为信使,将有关应用程序中发生的事件信息提供给 Redux store,然后 store 根据发生的 action 进行状态的更新。
|
||
|
||
# --instructions--
|
||
|
||
编写 Redux action 就像声明具有 type 属性的对象一样简单,声明一个对象`action`并为它设置一个属性`type`,并将他的值设置成字符串`'LOGIN'`。
|
||
|
||
# --hints--
|
||
|
||
应该有一个 action 对象。
|
||
|
||
```js
|
||
assert(
|
||
(function () {
|
||
return typeof action === 'object';
|
||
})()
|
||
);
|
||
```
|
||
|
||
该 action 的值应该为`LOGIN`。
|
||
|
||
```js
|
||
assert(
|
||
(function () {
|
||
return action.type === 'LOGIN';
|
||
})()
|
||
);
|
||
```
|
||
|
||
# --seed--
|
||
|
||
## --seed-contents--
|
||
|
||
```js
|
||
// Define an action here:
|
||
```
|
||
|
||
# --solutions--
|
||
|
||
```js
|
||
const action = {
|
||
type: 'LOGIN'
|
||
}
|
||
```
|