包含表单的组件分类: 受控组件和非受控组件
非受控组件
看一个例子:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0d049ef8b9b6056eb9e0aab53c9f8fe5.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/12558a66a1423307fed6e450bf83f6d8.gif)
我们再来实现一下点击获取用户名和密码并提示的功能:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0251459670da8f5826fea1525e43a06b.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/91c9824ccbfea1bc8dd3a17ecdc36043.gif)
原生的form表单在点击按钮以后会跳转到action对应的页面,我们不想跳转,可以怎么做?
可以使用原生的组织默认事件preventDefault
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1bf122df4133c55f97f6592de19f778b.png)
到此我们就写好了一个非受控组件
页面中所有输入类的DOM,都是现用现取的这种就是非受控组件
受控组件
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/65f7e5fbdd5f817ca1b40dec07bd5142.png)
页面中所有输入类的DOM,随着输入,就可以把值维护到state状态里面去,需要用的时候,直接从状态里面取,这就是受控组件
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/da26b19b1ccffcf78415099698d76cd1.gif)
建议写受控组件,因为受控组件里面一个ref都没有