react-07-state

简介: 书接上文的实时 ,时实时间显示的案例,肯定有很多疑问,解答一部分,寻寻渐进来

1.前言


书接上文的实时 ,时实时间显示的案例,肯定有很多疑问,解答一部分,寻寻渐进来


2.state


熟悉 vue的话 可以把 这个暂时理解成 vue 里面的data

2.1 定义状态对象 方式 -1

直接 类里面定义


class ClockComponent extends React.Component {
           //方式1: 定义状态对象
           // state = {value:100};
       constructor() {
         super();
       }


2.2 定义状态对象-2

构造函数里定义

this也等价于 vue里面的 实例对象

this.state 等价 vue this.data 用法


constructor() {
          super();
          console.log("1 constructor")
          // 自定义属性
          this.age = 108;   
          // 这里的this和 render里的this是一样的 
          // react规定好的命名!   state vue必须写到data
          this.state = {
            number: 666,
            time: new Date().toString()
          };
        }



3. render


接着上面的代码

总结了几种写法

这里开始 陆续开始使用解构赋值了


render() {
          console.log("2    render   ")
          console.log(this.props, this.state, this.age);
          // let name = this.props.name;
          // es6解构赋值 
          let { name } = this.props;
           // let {name,age} = {name:"李白"};
          let { time } = this.state;
          return (
            <div>
              <p id="timeElement">
                {name}--{this.age}--{time}
              </p>
            </div>
          );
        }



4.  钩子函数---componentDidMount


类似vuemounted DOM渲染完毕

vuecreatemounted做的事情,都在这个函数里完成

4.1 错误 修改    state

注意 的是不能直接修改


this.time = "测试
this.state.time = "测试...";

可以修改,但是不刷新!!!

并不会更新vue可以,但是react不行

4.2  正确修改state

只有setState  方法react才能监听到界面改变,绘制界面--执行render


componentDidMount() {
          console.log("3 componentDidMount", timeElement);
         this.setState({
              time:"测试..."
            });
        }


4.3 时钟实时更新

作用域问题 ,这个章节 目前 只能用箭头函数,你也可以尝试其他方式


componentDidMount() {
          console.log("3 componentDidMount", timeElement);
        // 用箭头函数 !!!  componentDidMount
          this.timerId = setInterval(() => {
            // this === 上层作用域的this
            this.setState({
              time: new Date().toString()
            });
          }, 1000);
        }


4.4   钩子componentWillUnmount--  关闭 时钟

componentWillUnmount组件消失的时候调用


componentWillUnmount() {
          clearInterval(this.timerId);
        }



5.   属性默认值


这是默认属性:这个对象会同步到组件里this.props里

使用组件的时候 name属性不填写 会使用这个默认值


ClockComponent.defaultProps = { name: "张三丰" };



6. 核心代码



class ClockComponent extends React.Component {
        constructor() {
          super();
          console.log("1 constructor")
          this.age = 108;
          this.state = {
            number: 666,
            time: new Date().toString()
          };
        }
        render() {
          console.log("2    render   ")
          console.log(this.props, this.state, this.age);
          let { name } = this.props;
          let { time } = this.state;
          return (
            <div>
              <p id="timeElement">
                {name}--{this.age}--{time}
              </p>
            </div>
          );
        }
        componentDidMount() {
          console.log("3 componentDidMount", timeElement);
          this.timerId = setInterval(() => {
            // this === 上层作用域的this
            this.setState({
              time: new Date().toString()
            });
          }, 1000);
        }
        // 组件消失的时候调用
        componentWillUnmount() {
          clearInterval(this.timerId);
        }
      }
      ClockComponent.defaultProps = { name: "张三丰" };
      ReactDOM.render(<ClockComponent  />, box);



7. 执行顺序


  1. 构造函数 constructor
  2. 渲染函数 render
  3. 钩子函数 componentDidMount


8.总结


1.props :传递数据 (上→下),只能用,不能改

state:状态,修改状态,界面可以重新绘制

2.constructor

自定义属性 this.age = 108;

状态 this.state = {}

3.钩子函数

4.修改值this.setState({})




相关文章
|
3天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
12天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
7天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
496 203
|
5天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
652 157
|
11天前
|
人工智能 自然语言处理 安全
国内主流Agent工具功能全维度对比:从技术内核到场景落地,一篇读懂所有选择
2024年全球AI Agent市场规模达52.9亿美元,预计2030年将增长至471亿美元,亚太地区增速领先。国内Agent工具呈现“百花齐放”格局,涵盖政务、金融、电商等多场景。本文深入解析实在智能实在Agent等主流产品,在技术架构、任务规划、多模态交互、工具集成等方面进行全维度对比,结合市场反馈与行业趋势,为企业及个人用户提供科学选型指南,助力高效落地AI智能体应用。
|
5天前
|
数据采集 消息中间件 人工智能
跨系统数据搬运的全方位解析,包括定义、痛点、技术、方法及智能体解决方案
跨系统数据搬运打通企业数据孤岛,实现CRM、ERP等系统高效互通。伴随数字化转型,全球市场规模超150亿美元,中国年增速达30%。本文详解其定义、痛点、技术原理、主流方法及智能体新范式,结合实在Agent等案例,揭示从数据割裂到智能流通的实践路径,助力企业降本增效,释放数据价值。
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
662 46