Browse Source

wrong words

pull/90/head
jingxun 2 years ago
parent
commit
36cdd2e195
  1. 26
      day21/note/lesson059_todolist_add_todo.md

26
day21/note/lesson059_todolist_add_todo.md

@ -1,6 +1,6 @@
# `TodoList`案例之添加新事件
# `TodoList`案例之添加新`todo`
上节课我们学习了然后初始化加载展示一个动态的列表,在学习的过程中留下了一个问题不知道大家还记不记得,就是我们的子组件能修改父组件的`state`吗?因为上节课我们把数据都存储在了`App`组件的`state`中了。如果我们想通过`Add`组件来添加新的事件的话是不是就要把事件加到`App`的`state`中去?那么我们能不能完成这步操作呢?这节课我们就来研究一下。
上节课我们学习了然后初始化加载展示一个动态的列表,在学习的过程中留下了一个问题不知道大家还记不记得,就是我们的子组件能修改父组件的`state`吗?因为上节课我们把数据都存储在了`App`组件的`state`中了。如果我们想通过`Add`组件来添加新的`todo`的话是不是就要把`todo`加到`App`的`state`中去?那么我们能不能完成这步操作呢?这节课我们就来研究一下。
## 回顾
@ -14,11 +14,11 @@
以上便是上节课的主要内容,接下来我们来研究能不能以及如何在子组件中修改父组件的`state`。
## 添加新事件
## 添加新`todo`
我们先来看一下,我们既然要添加新事件,那么是一个什么流程?
我们先来看一下,我们既然要添加新`todo`,那么是一个什么流程?
1. 输入事件
1. 输入`todo`
2. 按下回车键
3. 获取到输入的值
4. 添加到`App`组件的`state`中
@ -109,7 +109,7 @@ export default class App extends Component {
那么我在`Add`组件中调用我们传进去的`add`方法,那是不是就直接操作了`App`组件中的`state`?那么我们再让`add`方法来接收一个参数,那么我们是不是就可以在`Add`组件中把值传给`add`方法,由`add`方法来修改`App`的`state`了?
再来看看`add`方法中,我们添加新的事件,旧事件是不是还要留着啊?而且新事件要在最前面,那么我们就用展开运算符来拼接一下。接下来我们来修改一下`Add`组件
再来看看`add`方法中,我们添加新的`todo`,旧`todo`是不是还要留着啊?而且新`todo`要在最前面,那么我们就用展开运算符来拼接一下。接下来我们来修改一下`Add`组件
```jsx
export default class Add extends Component {
@ -127,9 +127,9 @@ export default class Add extends Component {
![image-20220107162830281](https://file.lynchow.com/image-20220107162830281.png)
这次我们成功添加了事件,而且正如需求中所说的那样,新事件在最上面显示。
这次我们成功添加了`todo`,而且正如需求中所说的那样,新`todo`在最上面显示。
但是我们这么写其实是不规范的,为什么呢?如果说我们的这个`state`中的事件对象结构变了的话我们是不是还要去改这个方法啊?那么我们怎么改一下?
但是我们这么写其实是不规范的,为什么呢?如果说我们的这个`state`中的`todo`对象结构变了的话我们是不是还要去改这个方法啊?那么我们怎么改一下?
```jsx
export default class App extends Component {
@ -164,11 +164,11 @@ export default class Add extends Component {
```
首先我们来看,我们导入了`nanoid`然后在`handleKeyUp`方法中我们定义了一个新的事件对象,他的`id`直接调用了`nanoid`方法来生成,`name`就是我们的`target.value`,那么`done`呢?我们往`todolist`里面添加是不是肯定都还没完成?如果完成了也不会往里面添加啊。所以说这都是没完成的,所以说,那就默认`false`。然后我们再把这个对象传给`add`方法就可以完成`state`的更新了,我们再看一下效果:
首先我们来看,我们导入了`nanoid`然后在`handleKeyUp`方法中我们定义了一个新的`todo`对象,他的`id`直接调用了`nanoid`方法来生成,`name`就是我们的`target.value`,那么`done`呢?我们往`todolist`里面添加是不是肯定都还没完成?如果完成了也不会往里面添加啊。所以说这都是没完成的,所以说,那就默认`false`。然后我们再把这个对象传给`add`方法就可以完成`state`的更新了,我们再看一下效果:
![image-20220107165235291](https://file.lynchow.com/image-20220107165235291.png)
这次我也成功地更新了页面。但是我们有一个细节上的问题大家注意到没有?我们添加新事件之后输入框却没有清空,而且还有一个问题:
这次我也成功地更新了页面。但是我们有一个细节上的问题大家注意到没有?我们添加新`todo`之后输入框却没有清空,而且还有一个问题:
![image-20220107165427547](https://file.lynchow.com/image-20220107165427547.png)
@ -217,12 +217,12 @@ export default class Add extends Component {
![image-20220107170222687](https://file.lynchow.com/image-20220107170222687.png)
添加事件之后输入框也清空了,所以说这样是没有问题的,以上便是我们添加的功能
添加`todo`之后输入框也清空了,所以说这样是没有问题的,以上便是我们添加的功能
## 总结
- 添加事件分为 5 步
1. 输入事件
- 添加`todo`分为 5 步
1. 输入`todo`
2. 按下回车键
3. 获取到输入的值
4. 添加到`App`组件的`state`中

Loading…
Cancel
Save