组件的状态里面存着数据,数据的改变驱动页面展示
1.点击事件
2.state效果
点击实现冷热切换
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 准备好一个"容器" -->
<div id="test"></div>
<!-- 引入react核心库 -->
<script type="text/javascript" src="./js/react.development.js"></script>
<!-- 引入react-DOM,用于支持react操作DOM -->
<script type="text/javascript" src="./js/react-dom.development.js"></script>
<!-- 引入bable,用于将jsx转为js -->
<script type="text/javascript" src="./js/babel.min.js"></script>
<script type="text/babel">/* 此处一定要写babel*/
//1.创建组件
class Weather extends React.Component{
constructor(props){
super(props)
//初始化状态
this.state = {isHot:true}
//解决了changeWeather中this的指向问题。
this.changeWeather = this.changeWeather.bind(this)
}
render(){
//读取状态
const {isHot} = this.state
// onClick,C要大写,调用demo()要写{demo形式}
return <h1 onClick={this.changeWeather}>今天天气很{isHot ? '炎热':'凉爽'}</h1>
}
changeWeather(){
//changeWeather放在哪里?--Weather的原型对象上,供实例使用
//由于changeWeather是作为onClick的回调,所以不是通过实例调用的,是直接使用的。
//类中的方法默认开启了局部的严格模式,所以changeWeather中的this为undefined
//获取原来的isHot值
const isHot = this.state.isHot
//状态必须通过setState进行更新,且更新是一种合并不是替换
this.setState({isHot:!isHot})
}
}
//2.渲染组件到页面 下面必须写标签且必须闭合
ReactDOM.render(<Weather/>,document.getElementById('test'))
function demo(){
console.log("标题被点击了");
}
</script>
</body>
</html>
下图是简写
3.理解
- state是组件对象最重要的属性, 值是对象(可以包含多个key-value的组合)
- 组件被称为"状态机", 通过更新组件的state来更新对应的页面显示(重新渲染组件)
4.强烈注意
- 组件中render方法中的this为组件实例对象
- 组件自定义的方法中this为undefined,如何解决?
- 强制绑定this: 通过函数对象的bind()
- 箭头函数
- 状态数据,不能直接修改或更新