目录
什么是组件?
组件就相当于页面中的部分功能,然后我们像搭积木一样,将不同的组件组合起来,然后实现一个完整地页面功能。
组件的特点:可复用,独立,可组合。
React 组件 有两种创建方式,函数组件和类组件。
使用函数创建组件前,我们要知道一些创建的规则。
- 组件的名称必须首字母大写,react内部会根据这个来判断是组件还是普通的HTML标签。
- 函数组件必须有返回值,表示该组件的 UI 结构;如果不需要渲染任何内容,则返回 null。
- 组件就像 HTML 标签一样可以被渲染到页面中。组件表示的是一段结构内容,对于函数组件来说,渲染的内容是函数的返回值就是对应的内容。
- 使用函数名称作为组件标签名称,可以成对出现也可以自闭合。
代码演示:
效果:
创建规则:
- 类名称也必须以大写字母开头。
- 类组件应该继承 React.Component 父类,从而可以使用父类中提供的方法或属性。
- 类组件必须提供 render() 方法。
- render() 方法必须有返回值,表示该组件的结构
效果:
项目中的组件多了之后,全都写在一个地方,就会显得很乱,这时候我们就可以将每个组件放到单独的js 文件中去。
1、创建 Hello.js 文件,在里面创建好组件并导出
2、在 app.js 中导入并渲染
3、效果
React 事件绑定语法与 DOM 事件语法相似
- 语法:on+事件名称={事件处理程序},比如:onClick={() => {}}
- 注意:React 事件采用驼峰命名法,比如:onMouseEnter、onFocus
示例:
Hello.js
app.js
效果:
看完 事件绑定 ,现在我们来了解事件对象 e , 然后如何获取,在某些场景下,比如说阻止我们的默认行为,我们就可能会用到我们的事件对象 e 。
- 可以通过事件处理程序的参数获取到事件对象 e
- React 中的事件对象叫做:合成事件(对象)
- 合成事件:兼容所有浏览器,无需担心跨浏览器兼容性问题
案例 :
图中的绑定事件里,我使用了 a 标签 ,大家知道 a 标签都是默认进行跳转的 ,但是 我在 定义 事件回调的那里阻止了默认行为 ,接下来 我们 直接看效果。
它并没有进行跳转。
有的时候,我们需要传递一些自己需要的参数,那这个时候该怎么做?很简单,我们直接看示例
效果 :
一个前提:在react hook出来之前,函数式组件是没有自己的状态的,所以我们统一通过类组件来讲解
步骤:初始化状态 ——>读取状态——>修改状态——>影响视图
- 通过class的实例属性state来初始化
- state的值是一个对象结构,表示一个组件可以有多个数据状态
State.js
通过this.state来获取状态
- 箭头函数
- Function.prototype.bind()
- class 的实例方法
- 利用箭头函数自身不绑定this的特点
- render() 方法中的 this 为组件实例,可以获取到 setState()
利用ES5中的bind方法,将事件处理程序中的this与组件实例绑定到一起
- 利用箭头函数形式的class实例方法
- 注意:该语法是实验性语法,但是,由于babel的存在可以直接使用
大家喜欢哪一种呢?
1. 受控组件 (推荐)
2. 非受控组件(DOM方式)
什么是受控组件? input框自己的状态被React组件状态控制
React组件的状态的地方是在state中,input表单元素也有自己的状态是在value中,React将state与表单元素的值(value)绑定到一起,由state的值来控制表单元素的值,从而保证单一数据源特性。
React 中可变状态通常保存在 state 中,只能通过 setState() 方法来修改。
什么是非受控组件?
非受控组件就是通过手动操作dom的方式获取文本框的值,文本框的状态不受react组件的state中的状态控制,直接通过原生dom获取输入框的值。