ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

react组件三大核心之一state

2022-08-21 18:34:11  阅读:165  来源: 互联网

标签:changeWeather 调用 render isHot react 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>组件实例核心属性1:state</title>
</head>
<body>
  <!-- 准备一个容器 -->
  <div id="test"></div>
  <!-- 引入react核心库 -->
  <script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.min.js"></script>
  <!-- 引入react-dom, 用于支持react操作dom, 需要在核心库之后引入 -->
  <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.min.js"></script>
  <!-- 引入babel.js,用于将jsx转化为js -->
  <script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.18.7/babel.min.js"></script>

  <script type="text/babel">
    // 1.创建类组件
    class Weather extends React.Component {
      // 构造器调用几次?----1次
      constructor(props) {
        console.log('constructor');
        super(props);
        // 初始化状态
        this.state = { isHot: true };
        // 解决changeWeather的this指向问题
        this.changeWeather = this.changeWeather.bind(this);
      }
      // render调用几次?----1+n次,初始化调用一次,每次状态更新调用一次
      render() {
        console.log('render');
        return <h1 id="title" onClick={this.changeWeather}>今天天气很{this.state.isHot ? '炎热' : '凉爽'}</h1>
      }
      changeWeather() {
        // changeWeather放在哪里?---Weather的原型对象上,供实例调用
        // 由于changeWeather是作为onClick的回调,所以不是通过实例调用的,是直接调用
        // 类中的方法默认开启了局部的严格模式,所以changeWeather中的this为undefined
        // 严重注意,状态state不可直接更改,
        // this.state.isHot = !this.state.isHot; 这是错误的写法
        // 严重注意,state必须通过setState修改,且更新是合并,不是替换(不是把整个state对象替换了)
        const { isHot } = this.state;
        this.setState({ isHot: !isHot })
      }
    }
    // 2.渲染组件到页面
    ReactDOM.render(<Weather />, document.getElementById('test'))
  </script>
</body>
</html>

 

 

 

 

 

-

标签:changeWeather,调用,render,isHot,react,state,组件,三大
来源: https://www.cnblogs.com/fqh123/p/16610459.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有