react组件
1. 组件创建
1.1 使用函数创建
function Hello(){
return (
<div>第一个函数组件</div>
)
}
- 约定
- 函数名称必须以大写字母开头
- 函数组件必须有返回值,表示该组件的结构
- 渲染函数组件:用函数名作为组件标签名
ReactDOM.render(<Hello/>,document.getElementById('root'))
1.2 使用类创建组件
class Hello extends React.Component{
render(){
return (<div>Hello Class Component!</div>)
}
}
- 约定
- 类名称也必须以大写字母开头
- 类组件应该继承React.Component父类,从而可以使用父类中提供的方法或属性
- 类组件必须提供render()方法
- render()方法必须有返回值,表示该组件的结构
1.3 抽离为独立JS文件
- 1.创建Hello.js
- 2.在Hello.js中倒入React
- 3.创建组件(函数或类)
- 4.在Hello.js中导出该组件
- 5.在index.js中导入Hello组件
- 6.渲染组件
2 react事件处理
2.1 事件绑定
- react事件绑定语法和事件语法相似
- 语法:on+事件名称={事件处理程序},比如:onClick={()=>{}}
- 注意:react事件采用驼峰命名法,比如:onMouseEnter/onFocus
//通过类组件
class App extends React.Component{
handleClick(){
console.log('单击事件触发了')
}
render(){
return(
<button onClick={this.handleClick}></button>
)
}
}
//通过函数组件
function App(){
function handleClick(){
console.log('函数组件中的事件绑定,事件触发了')
return(
<button onClick={handleClick}>点我</button>
)
}
}
2.2 事件对象
function handleClick(e){
e.preventDefault()
console.log('事件对象',e)
}
<a onClick={handleClick}>点我,不会跳转页面</a>
- react中的事件对象叫作:合成事件(对象)
- 合成事件:兼容所有的浏览器,无需担心跨浏览器兼容性问题
3. 有状态组件和无状态组件
- 函数组件又叫作无状态组件,类组件又叫作有状态组件
- 状态即数据
- 函数组件没有自己的状态,只负责数据展示(静)
- 类组件有自己的状态,负责更新UI,
4. 组件的state
4.1 state的基本使用
- 状态(state)即数据,是组件内部的私有数据,只能在组件内部使用
- state的值是对象,表示一个组件中可以有多个数据
class Hello extends React.Component{
//语法1状态初始化
constructor(){
super()
this.state={
count:0
}
}
//语法2状态初始化
state={
count:10
}
render(){
return(
<div>有状态组件</div>
)
}
}
4.2 setState()修改状态
- 状态是可变的
- 语法:this.setState({要改变的数据})
- 注意:不要直接修改state中的值,这是错误的!
- 思想:数据驱动视图
//正确
//要修改哪一个就把哪一个传进来就可以,不会影响state其他数据
this.setState({
count:this.state.count+1
})
//错误
this.state.count+=1