017_setState的使用

这样就实现了

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>06_组件实例三大属性1_state.html.html.html</title>
    <!--引入 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>
    <!--引入babel,用于将jsx转为js-->
    <script type="text/javascript" src="../js/babel.min.js"></script>
</head>
<body>
<!--准备好一个"容器""-->
<div id="test"></div>
<!--
react 中 他重新封装了这些事件, 他
-->
<button></button>
<!--babel,表示是jsx-->
<script type="text/babel">
    // 1. 创建组件
    class Weather extends React.Component {
        constructor(props) {
            super(props);
            // 初始化状态
            this.state = {isHot: false}
            this.changeWeather = this.changeWeather.bind(this)
            // 可以获取到了
            // this.changeWeather 可以通过原型找到他
            // this.changeWeather.bind(this) 执行完了就获得到了一个实例对象
            // 然后赋值给了changeWeather
            this.demo = this.changeWeather
            // 解决changeWeather 指向的问题
        }

        render() {
            console.log(this);
            // 读取状态
            const {isHot} = this.state
            return <h1 onClick={this.demo}>今天天气很{isHot ? '炎热' : '凉爽'}</h1>
            // 这里调用的是自身上的changeWeather,而不是原型上的changeWeather
            // this.changeWeather = this.changeWeather.bind(this)
            // 吧原型上的函数 挂在了 本实例 中的属性上

        }

        changeWeather() {
            console.log(this);  // 报错
            // 获取原来的isHot值
            const isHot = this.state.isHot
            // 严重注意: 状态(state)不可直接更改,下面这行就是直接更改!!!
            // this.state.isHot = !isHot|;   // 这是错误的写法
            // 严重注意!   : 状态必须使用 setState 来修改
            this.setState({isHot:!isHot});   // 这是错误的写法
            console.log(this.state.isHot);
            // 这里面改成了,布尔值已经完成切换了
        }
    }

    // 2.  渲染 组件到页面
    ReactDOM.render(<Weather/>, document.getElementById('test'));

</script>


</body>
</html>

image-20210309165426749

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>06_组件实例三大属性1_state.html.html.html</title>
    <!--引入 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>
    <!--引入babel,用于将jsx转为js-->
    <script type="text/javascript" src="../js/babel.min.js"></script>
</head>
<body>
<!--准备好一个"容器""-->
<div id="test"></div>
<!--
react 中 他重新封装了这些事件, 他
-->
<button></button>
<!--babel,表示是jsx-->
<script type="text/babel">
    // 1. 创建组件
    class Weather extends React.Component {
        // 构造器调用1次
        constructor(props) {
            super(props);
            // 初始化状态
            this.state = {isHot: false, wind: '威风'}
            this.changeWeather = this.changeWeather.bind(this)
            // 可以获取到了
            // this.changeWeather 可以通过原型找到他
            // this.changeWeather.bind(this) 执行完了就获得到了一个实例对象
            // 然后赋值给了changeWeather
            this.demo = this.changeWeather
            // 解决changeWeather 指向的问题
        }
        // render调用几次? - 1+n次, 1是初始化的那次 n是状态更新的次数
        render() {
            console.log(this);
            // 读取状态
            const {isHot,wind} = this.state
            return <h1 onClick={this.demo}>今天天气很{isHot ? '炎热' : '凉爽'},{wind}</h1>
            // 这里调用的是自身上的changeWeather,而不是原型上的changeWeather
            // this.changeWeather = this.changeWeather.bind(this)
            // 吧原型上的函数 挂在了 本实例 中的属性上
        }

        changeWeather() {
            console.log(this);  // 报错
            // 获取原来的isHot值
            const isHot = this.state.isHot
            // 严重注意: 状态(state)不可直接更改,下面这行就是直接更改!!!
            // this.state.isHot = !isHot|;   // 这是错误的写法
            // 严重注意!   : 状态必须使用 setState 来修改,且更新不是替换,而是一种合并
            this.setState({isHot: !isHot});   // 这是错误的写法
            // 这里面是只是改变了isHot ,还是吧wind 替换没了
        }
    }

    // 2.  渲染 组件到页面
    ReactDOM.render(<Weather/>, document.getElementById('test'));

</script>


</body>
</html>

1615293560442


results matching ""

    No results matching ""