第九篇【传奇开心果短博文系列】鸿蒙开发技术点案例示例:ArkUI强大的状态管理机制解读

传奇开心果短博文系列

  • 系列短博文目录
    • 鸿蒙开发技术点案例示例系列
  • 短博文目录
    • 一、前言
    • 二、ArkUI强大的状态管理机制介绍
    • 三、以官方helloworld示例为例说明ArkUI的状态定义和管理
    • 四、以官方 HelloWorld 示例代码为例说明ArkUI状态依赖和自动更新
    • 五、以官方helloworld示例代码为例说明ArkUI异步状态更新
    • 六、以官方helloworld示例代码为例说明ArkUI状态持久化和恢复
    • 七、以官方helloworld示例代码为例说明ArkUI的状态订阅和通知
    • 八、归纳总结

系列短博文目录

鸿蒙开发技术点案例示例系列

短博文目录

一、前言

在这里插入图片描述ArkTS的ArkUI提供了强大的状态管理机制,可以帮助开发者管理应用程序的状态和数据流,从而简化应用程序的开发和维护。

二、ArkUI强大的状态管理机制介绍

在这里插入图片描述ArkUI是ArkTS框架中的一个模块,提供了强大的状态管理机制,可以帮助开发者更好地管理应用程序的状态和数据流。通过使用ArkUI,开发者可以轻松地定义和管理应用程序的状态,以及定义状态之间的依赖关系和数据流动。

以下是ArkUI的一些主要特点和功能:

  1. 状态定义和管理:ArkUI允许开发者定义和管理应用程序的状态。开发者可以通过定义状态模型来描述应用程序的状态,并使用ArkUI提供的API来访问和修改状态。

  2. 状态依赖和自动更新:ArkUI支持状态之间的依赖关系。当一个状态发生变化时,与之相关联的其他状态会自动更新。这使得开发者可以轻松地维护状态之间的一致性和数据流动。

  3. 异步状态更新:ArkUI支持异步状态更新,可以方便地处理异步操作和数据获取。开发者可以使用异步函数来更新状态,并在异步操作完成后自动更新相关状态。

  4. 状态持久化和恢复:ArkUI支持状态的持久化和恢复。开发者可以将状态保存到本地存储或远程服务器,并在需要时从存储中恢复状态。

  5. 状态订阅和通知:ArkUI提供了状态订阅和通知的机制。开发者可以订阅状态的变化,并在状态发生变化时收到通知,以便及时做出响应。

通过使用ArkUI,开发者可以更好地管理应用程序的状态和数据流,提高开发效率,并简化应用程序的开发和维护过程。如果你对ArkUI有进一步的疑问或需要更详细的信息,请随时提问。

三、以官方helloworld示例为例说明ArkUI的状态定义和管理

(一)官方helloworld示例代码
//装饰器,指页面入口。
@Entry
//装饰器,指下面开始自定义组件
@Component
//自定义组件
struct Index {
//装饰器,指状态变量,字符串类型,赋值:"Hello World’
@State message: string = “Hello World”;

//构造函数,UI声明
build() {
//横向布局组件
Row() {
//嵌套纵向布局组件
Column() {
//文本组件,参数
Text(this.message)
//设置字号
.fontSize(50)
//设置字体粗细
.fontWeight(FontWeight.Bold)
}
//设置页面宽度占比百分比
.width(‘100%’)
}
//设置页面高度占比百分比
.height(‘100%’)
}
}
(二)以上述代码为例说明ArkUI的状态定义和管理
在上述代码中,我们可以看到ArkUI的状态定义和管理的示例:

  1. 首先,在组件的装饰器@Component下方使用装饰器@State来定义一个状态变量message,并给它赋初值为"Hello World"。

  2. 在构造函数build()中,我们使用Row()来创建一个横向布局,并在其中嵌套使用Column()来创建一个纵向布局。

  3. Column()中,我们使用Text()组件来显示状态变量message的值,并通过链式调用方法来设置文本的字体大小和加粗程度。

  4. 最后,我们通过.width('100%').height('100%')来设置组件的宽度和高度占比为100%。

通过上述示例,我们可以看到在ArkUI中,使用装饰器@State来定义状态变量,并在构造函数build()中使用这些状态变量来构建UI界面。当状态变量发生变化时,相关的UI组件会自动更新以反映最新的状态。

请注意,以上示例仅展示了ArkUI状态定义和管理的一部分功能,实际使用中还可以根据需求进行更复杂的状态管理和UI构建。
(三)ArkUI更复杂的状态管理和UI构建示例代码
当然,实际使用中,我们可以根据需求进行更复杂的状态管理和UI构建。以下是一个示例代码,展示了ArkUI中更复杂的状态管理和UI构建:

// 装饰器,指页面入口。
@Entry
// 装饰器,指下面开始自定义组件。
@Component
// 自定义组件
struct MyApp {
  // 装饰器,指状态变量,字符串类型,并赋初始值为"Hello World"。
  @State message: string = "Hello World";
  
  // 装饰器,指状态变量,布尔类型,并赋初始值为false。
  @State isClicked: boolean = false;

  // 构造函数,用于声明UI结构。
  build() {
    return (
      <Column>
        {/* 条件渲染 */}
        {this.isClicked ? (
          <Text(this.message)
            .fontSize(24)
            .fontWeight(FontWeight.Bold) />
        ) : (
          <Button
            text="Click Me"
            onPress={() => this.handleClick()}
          />
        )}
      </Column>
    );
  }

  // 处理点击事件的方法
  handleClick() {
    // 更新状态变量
    this.message = "Button Clicked!";
    this.isClicked = true;
  }
}

在上述示例代码中,我们添加了一个新的状态变量isClicked,并根据其值来进行条件渲染。当isClickedtrue时,显示一个文本组件来展示message的值;当isClickedfalse时,显示一个按钮组件,并在点击按钮时调用handleClick()方法来更新状态变量。

这个示例展示了更复杂的状态管理和UI构建,包括条件渲染和事件处理。通过使用不同的状态变量和相应的逻辑,我们可以根据需求创建更丰富和交互性的用户界面。

四、以官方 HelloWorld 示例代码为例说明ArkUI状态依赖和自动更新

在这里插入图片描述(一)以下是以官方 HelloWorld 示例代码为例,说明 ArkUI 的状态依赖和自动更新的特性:

// 装饰器,指页面入口。
@Entry
// 装饰器,指下面开始自定义组件。
@Component
// 自定义组件
struct HelloWorld {
  // 装饰器,指状态变量,字符串类型,并赋初始值为"Hello".
  @State greeting: string = "Hello";
  
  // 装饰器,指状态变量,字符串类型,并赋初始值为"World".
  @State target: string = "World";

  // 构造函数,用于声明 UI 结构。
  build() {
    return (
      <Column>
        {/* 文本组件,显示 greeting 和 target 变量的值 */}
        <Text(`${this.greeting}, ${this.target}!`)
          .fontSize(24)
          .fontWeight(FontWeight.Bold) />

        {/* 按钮组件,点击后更新 target 的值 */}
        <Button
          text="Change Target"
          onPress={() => this.changeTarget()}
        />
      </Column>
    );
  }

  // 更新 target 的方法
  changeTarget() {
    // 更新状态变量
    this.target = "ArkUI";
  }
}

在上述示例代码中,我们定义了两个状态变量 greetingtarget,分别初始化为 “Hello” 和 “World”。在 build() 方法中,我们使用 <Text> 组件来显示这两个变量的值,并使用 <Button> 组件来触发 changeTarget() 方法。

当点击按钮时,changeTarget() 方法被调用,更新了 target 的值为 “ArkUI”。由于 <Text> 组件中引用了 greetingtarget 这两个状态变量,当 target 的值发生改变时,相关的 UI 组件会自动更新以反映最新的状态。

这展示了 ArkUI 的状态依赖和自动更新的特性。当一个状态变量发生改变时,与之相关联的 UI 组件会自动更新,而不需要手动进行更新操作。

请注意,以上示例仅为演示目的,实际使用中可以根据具体需求定义更多的状态变量,并在 UI 中使用它们。

(二)定义更多的状态变量展示ArkUI状态依赖和自动更新。以下是一个示例代码,展示了在 ArkUI 中定义更多的状态变量,以展示状态依赖和自动更新的特性:

// 装饰器,指页面入口。
@Entry
// 装饰器,指下面开始自定义组件。
@Component
// 自定义组件
struct Counter {
  // 装饰器,指状态变量,整数类型,并赋初始值为0。
  @State count: number = 0;
  
  // 装饰器,指状态变量,布尔类型,并赋初始值为false。
  @State isPaused: boolean = false;

  // 构造函数,用于声明 UI 结构。
  build() {
    return (
      <Column>
        {/* 文本组件,显示 count 变量的值 */}
        <Text(`Count: ${this.count}`)
          .fontSize(24)
          .fontWeight(FontWeight.Bold) />

        {/* 按钮组件,点击后增加 count 的值 */}
        <Button
          text="Increase Count"
          onPress={() => this.increaseCount()}
        />

        {/* 开关组件,用于暂停/恢复计数 */}
        <Switch
          value={this.isPaused}
          onValueChange={(value) => this.togglePause(value)}
        />
      </Column>
    );
  }

  // 增加 count 值的方法
  increaseCount() {
    // 只有当 isPaused 为 false 时才增加 count 的值
    if (!this.isPaused) {
      this.count++;
    }
  }

  // 切换暂停状态的方法
  togglePause(value: boolean) {
    this.isPaused = value;
  }
}

在上述示例代码中,我们定义了两个状态变量 countisPaused,分别初始化为 0 和 false。在 build() 方法中,我们使用 <Text> 组件显示 count 变量的值,并使用 <Button> 组件来增加 count 的值。同时,我们还使用 <Switch> 组件来切换 isPaused 的值。

当点击按钮增加 count 的值时,只有当 isPaused 的值为 false 时才会增加。而当切换开关组件的状态时,会更新 isPaused 的值。由于 <Text> 组件引用了 count 这个状态变量,当 count 的值发生改变时,相关的 UI 组件会自动更新以反映最新的状态。

这展示了 ArkUI 的状态依赖和自动更新的特性。通过定义多个状态变量并在 UI 中使用它们,可以实现更复杂的状态管理和自动更新的效果。

请注意,以上示例仅为演示目的,实际使用中可以根据具体需求定义更多的状态变量,并在 UI 中使用它们。

五、以官方helloworld示例代码为例说明ArkUI异步状态更新

在这里插入图片描述在 ArkUI 中,可以使用异步操作来更新状态。以下是以官方 HelloWorld 示例代码为例,说明 ArkUI 的异步状态更新的特性:

// 装饰器,指页面入口。
@Entry
// 装饰器,指下面开始自定义组件。
@Component
// 自定义组件
struct HelloWorld {
  // 装饰器,指状态变量,字符串类型,并赋初始值为"Hello".
  @State greeting: string = "Hello";
  
  // 装饰器,指状态变量,字符串类型,并赋初始值为"World".
  @State target: string = "World";

  // 构造函数,用于声明 UI 结构。
  build() {
    return (
      <Column>
        {/* 文本组件,显示 greeting 和 target 变量的值 */}
        <Text(`${this.greeting}, ${this.target}!`)
          .fontSize(24)
          .fontWeight(FontWeight.Bold) />

        {/* 按钮组件,点击后异步更新 target 的值 */}
        <Button
          text="Change Target"
          onPress={() => this.changeTargetAsync()}
        />
      </Column>
    );
  }

  // 异步更新 target 的方法
  async changeTargetAsync() {
    // 模拟异步操作,比如发送网络请求或执行耗时任务
    await sleep(2000); // 假设等待2秒钟

    // 更新状态变量
    this.target = "ArkUI";
  }
}

// 辅助函数,用于模拟异步操作的延迟
function sleep(ms: number) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

在上述示例代码中,我们添加了一个新的方法 changeTargetAsync(),用于模拟异步操作。在这个方法中,我们使用了 await 关键字来等待一个延迟,比如发送网络请求或执行耗时任务。在这里,我们使用了 sleep() 辅助函数来模拟等待2秒钟。

在异步操作完成后,我们更新了 target 的值为 “ArkUI”。由于 <Text> 组件中引用了 greetingtarget 这两个状态变量,当 target 的值发生改变时,相关的 UI 组件会自动更新以反映最新的状态。

这展示了 ArkUI 的异步状态更新的特性。通过使用异步操作,可以在需要的时候更新状态,并且 UI 组件会自动更新以反映最新的状态。

请注意,以上示例仅为演示目的,实际使用中可以根据具体需求执行各种异步操作,并在操作完成后更新相应的状态。

六、以官方helloworld示例代码为例说明ArkUI状态持久化和恢复

在这里插入图片描述在 ArkUI 中,可以通过使用持久化存储来实现状态的持久化和恢复。以下是以官方 HelloWorld 示例代码为例,说明 ArkUI 的状态持久化和恢复的特性:

// 装饰器,指页面入口。
@Entry
// 装饰器,指下面开始自定义组件。
@Component
// 自定义组件
struct HelloWorld {
  // 装饰器,指状态变量,字符串类型,并赋初始值为"Hello".
  @State greeting: string = "Hello";
  
  // 装饰器,指状态变量,字符串类型,并赋初始值为"World".
  @State target: string = "World";

  // 构造函数,用于声明 UI 结构。
  build() {
    return (
      <Column>
        {/* 文本组件,显示 greeting 和 target 变量的值 */}
        <Text(`${this.greeting}, ${this.target}!`)
          .fontSize(24)
          .fontWeight(FontWeight.Bold) />

        {/* 按钮组件,点击后保存状态到本地存储 */}
        <Button
          text="Save State"
          onPress={() => this.saveState()}
        />

        {/* 按钮组件,点击后从本地存储中恢复状态 */}
        <Button
          text="Restore State"
          onPress={() => this.restoreState()}
        />
      </Column>
    );
  }

  // 保存状态到本地存储的方法
  saveState() {
    // 使用 localStorage 或其他持久化存储方式保存状态
    localStorage.setItem("greeting", this.greeting);
    localStorage.setItem("target", this.target);
  }

  // 从本地存储中恢复状态的方法
  restoreState() {
    // 从 localStorage 或其他持久化存储方式中读取状态
    const savedGreeting = localStorage.getItem("greeting");
    const savedTarget = localStorage.getItem("target");

    // 恢复状态
    if (savedGreeting) {
      this.greeting = savedGreeting;
    }
    if (savedTarget) {
      this.target = savedTarget;
    }
  }
}

在上述示例代码中,我们添加了两个方法 saveState()restoreState(),用于保存和恢复状态。在 saveState() 方法中,我们使用 localStorage 或其他持久化存储方式将状态保存起来。在 restoreState() 方法中,我们从持久化存储中读取之前保存的状态,并将其恢复到相应的状态变量中。

通过在按钮组件上绑定这两个方法,我们可以实现在点击按钮时保存和恢复状态的功能。

这展示了 ArkUI 的状态持久化和恢复的特性。通过使用持久化存储,可以将状态保存到本地,并在需要时恢复状态,以实现状态的持久化和恢复。

请注意,以上示例仅为演示目的,实际使用中可以根据具体需求选择合适的持久化存储方式,并在适当的时机保存和恢复状态。

七、以官方helloworld示例代码为例说明ArkUI的状态订阅和通知

在这里插入图片描述在 ArkUI 中,可以使用状态订阅和通知的机制来实现组件之间的状态传递和更新。以下是以官方 HelloWorld 示例代码为例,说明 ArkUI 的状态订阅和通知的特性:

// 装饰器,指页面入口。
@Entry
// 装饰器,指下面开始自定义组件。
@Component
// 自定义组件
struct HelloWorld {
  // 装饰器,指状态变量,字符串类型,并赋初始值为"Hello".
  @State greeting: string = "Hello";
  
  // 装饰器,指状态变量,字符串类型,并赋初始值为"World".
  @State target: string = "World";

  // 构造函数,用于声明 UI 结构。
  build() {
    return (
      <Column>
        {/* 文本组件,显示 greeting 和 target 变量的值 */}
        <Text(`${this.greeting}, ${this.target}!`)
          .fontSize(24)
          .fontWeight(FontWeight.Bold) />

        {/* 输入框组件,用于修改 greeting 变量的值 */}
        <Input
          value={this.greeting}
          onValueChange={(value) => this.updateGreeting(value)}
        />

        {/* 按钮组件,点击后通知父组件更新 target 的值 */}
        <Button
          text="Notify Parent"
          onPress={() => this.notifyParent()}
        />

        {/* 子组件,通过 props 接收并显示 target 的值 */}
        <ChildComponent target={this.target} />
      </Column>
    );
  }

  // 更新 greeting 的方法
  updateGreeting(value: string) {
    this.greeting = value;
  }

  // 通知父组件更新 target 的方法
  notifyParent() {
    this.target = "ArkUI";
  }
}

// 子组件
@Component
struct ChildComponent {
  // 装饰器,指接收父组件传递的 props
  @Prop target: string;

  // 构造函数,用于声明 UI 结构。
  build() {
    return (
      <Text(`Child Component: ${this.target}`)
        .fontSize(16)
        .fontWeight(FontWeight.Normal) />
    );
  }
}

在上述示例代码中,我们创建了一个父组件 HelloWorld 和一个子组件 ChildComponent。父组件中定义了两个状态变量 greetingtarget,分别初始化为 “Hello” 和 “World”。在父组件的 build() 方法中,我们使用 <Text> 组件显示这两个变量的值,并使用 <Input> 组件来修改 greeting 的值。同时,我们还使用 <Button> 组件来触发 notifyParent() 方法,以通知父组件更新 target 的值。

子组件 ChildComponent 使用 @Prop 装饰器接收父组件传递的 target 属性,并将其显示在 <Text> 组件中。

通过这样的设计,父组件和子组件之间实现了状态的订阅和通知。当父组件的状态变量发生改变时,子组件会自动更新以反映最新的状态。

这展示了 ArkUI 的状态订阅和通知的特性。通过在组件之间传递属性和使用相应的事件处理方法,可以实现组件之间的状态传递和更新。

请注意,以上示例仅为演示目的,实际使用中可以根据具体需求定义更多的状态变量和组件,并在适当的时机进行状态的订阅和通知。

八、归纳总结

在这里插入图片描述ArkUI具有以下强大的状态管理机制:

  1. 状态变量装饰器:使用 @State 装饰器可以将属性声明为状态变量,使其能够跟踪状态的变化。

  2. 自动更新:当状态变量发生改变时,相关的 UI 组件会自动更新以反映最新的状态,无需手动进行更新操作。

  3. 异步状态更新:可以使用异步操作来更新状态,通过 await 关键字等待异步操作完成后再更新状态,保证状态的同步性。

  4. 状态持久化和恢复:可以通过持久化存储方式(如 localStorage)将状态保存起来,以便在需要时恢复状态,实现状态的持久化和恢复。

  5. 状态订阅和通知:组件之间可以通过属性传递和事件处理方法实现状态的订阅和通知,实现组件之间的状态传递和更新。

这些特性使得 ArkUI 的状态管理机制非常强大和灵活。开发者可以方便地定义和管理状态变量,并且可以自动更新、异步更新、持久化和恢复状态,以及实现组件之间的状态订阅和通知。这样的状态管理机制能够提高开发效率,简化状态管理的复杂性,并使应用程序更加可靠和可维护。在这里插入图片描述

总结起来,ArkUI的状态管理机制具有自动更新、异步状态更新、状态持久化和恢复、状态订阅和通知等强大特性,为开发者提供了便捷而灵活的状态管理解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/355192.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP语法

#本来是在学命令执行&#xff0c;所以学了学&#xff0c;后来发现&#xff0c;PHP语法和命令执行的关系好像没有那么大&#xff0c;不如直接学php的一些命令执行函数了。# #但是还是更一下&#xff0c;毕竟还是很多地方都要求掌握php作为脚本语言&#xff0c;所以就学了前面的…

多维时序 | Matlab实现DBO-GRU蜣螂算法优化门控循环单元多变量时间序列预测

多维时序 | Matlab实现DBO-GRU蜣螂算法优化门控循环单元多变量时间序列预测 目录 多维时序 | Matlab实现DBO-GRU蜣螂算法优化门控循环单元多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现DBO-GRU蜣螂算法优化门控循环单元多变量时间序列预…

第四十一周:文献阅读+GAN存在的问题和改进

目录 摘要 Abstract 文献阅读&#xff1a;基于Transformer的时间序列生成对抗网络 现有问题 提出方法 相关前提 GAN&#xff08;生成对抗网络&#xff09; Transformer 方法论 时间序列处理 TTS-GAN &#xff08;基于Transformer的时间序列生成对抗网络&#xff09;…

STM32学习笔记(二) —— 调试串口

我们在调试程序时&#xff0c;经常会使用串口打印相关的调试信息&#xff0c;但是单片机串口不能直接与 PC 端的 USB 接口通讯&#xff0c;需要用到一个USB转串口的芯片来充当翻译的角色。我们使用的开发板上有这个芯片&#xff0c;所以在打印调试信息的时候直接使用USB线连接开…

05.领域驱动设计:认识领域事件,解耦微服务的关键

目录 1、概述 2、领域事件 2.1 如何识别领域事件 1.微服务内的领域事件 2.微服务之间的领域事件 3、领域事件总体架构 3.1 事件构建和发布 3.2 事件数据持久化 3.3 事件总线 (EventBus) 3.4 消息中间件 3.5 事件接收和处理 4、案例 5、总结 1、概述 在事件风暴&a…

Jmeter连接数据库报错Cannot load JDBC driver class‘com.mysql.jdbc.Driver’解决

问题产生: 我在用jmeter连接数据库查询我的接口是否添加数据成功时,结果树响应Cannot load JDBC driver class com.mysql.jdbc.Driver 产生原因: 1、连接数据库的用户密码等信息使用的变量我放在了下面,导致没有取到用户名密码IP等信息,导致连接失败 2、jmeter没有JDB…

scrapy的入门使用

1 安装scrapy 命令: sudo apt-get install scrapy或者&#xff1a; pip/pip3 install scrapy2 scrapy项目开发流程 创建项目: scrapy startproject mySpider生成一个爬虫: scrapy genspider itcast itcast.cn提取数据:     根据网站结构在spider中实现数据采集相关内…

MATLAB - 仿真单摆的周期性摆动

系列文章目录 前言 本例演示如何使用 Symbolic Math Toolbox™ 模拟单摆的运动。推导摆的运动方程&#xff0c;然后对小角度进行分析求解&#xff0c;对任意角度进行数值求解。 一、步骤 1&#xff1a;推导运动方程 摆是一个遵循微分方程的简单机械系统。摆最初静止在垂直位置…

2024年数学建模美赛 分析与编程

2024年数学建模美赛 分析与编程 1、本专栏将在2024年美赛题目公布后&#xff0c;进行深入分析&#xff0c;建议收藏&#xff1b; 2、本专栏对2023年赛题&#xff0c;其它题目分析详见专题讨论&#xff1b; 2023年数学建模美赛A题&#xff08;A drought stricken plant communi…

uniapp组件库Card 卡片 的使用方法

目录 #平台差异说明 #基本使用 #配置卡片间距 #配置卡片左上角的缩略图 #配置卡片边框 #设置内边距 #API #Props #Slot #Event 卡片组件一般用于多个列表条目&#xff0c;且风格统一的场景。 #平台差异说明 AppH5微信小程序支付宝小程序百度小程序头条小程序QQ小程…

147基于matlab的信号多层分解和重构

基于matlab的信号多层分解和重构&#xff0c;进行多频率分析的源程序&#xff0c;一般步骤:取样、分解、信号处理、重构&#xff1b;采用离散滤波器对近似系数和小波系数进行操作;程序已调通&#xff0c;可直接运行。 147 离散小波变换 多频率分析 信号重构 (xiaohongshu.com)…

JDK 8 - SerializedLambda

SerializedLambda是Java提供的关于lambda表达式的序列化方案&#xff0c;会将实现了Serializable接口的lambda表达式转换成 SerializedLambda 对象之后再去做序列化。其核心在于Java在对lambda表达式序列化时&#xff0c;虚拟机会添加一个writeReplace()方法。 根据Java的序列化…

mac docker desktop被禁用了,如何使用虚拟机lima运行docker

安装lima brew install lima创建配置 echo "\\ndynamic:\n big-sur:\n image: docker://docker:git\n linux:\n image: docker.io/limasoftware/ubuntu:20.04 \\n" > ~/.lima/default.yaml启动名叫default的虚拟机 limactl start default测试 limactl …

echarts多个折线图共用X轴,实现tooltip合并和分离

echarts共享X轴案例&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</…

【办公类-23-01】20240128《百家姓》单姓与复姓

结果展示 背景需求&#xff1a; 20240128我去了苏州吴江的黎里古镇游玩&#xff0c;哪里有一面墙上都是百家姓做装饰。 这让我又想到我班级里的7个王姓的重姓率&#xff01; 【办公类-19-02-01】20240119统计班级幼儿姓名的长度、汉字重复、拼音重复&#xff08;有无声调&…

【ArcGIS遇上Python】python实现批量XY坐标生成shp点数据文件

单个手动生成:【ArcGIS风暴】ArcGIS 10.2导入Excel数据X、Y坐标(经纬度、平面坐标),生成Shapefile点数据图层 文章目录 一、问题分析二、解决办法三、注意事项一、问题分析 现有多个excel、txt或者csv格式的坐标数据,需要根据其坐标批量一键生成shp点数据,如下X为经度,…

回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测(含优化前后预测可视化)

回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测 目录 回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测预测效果基本介绍程序设计参考资料预测效果 <

力扣3. 无重复字符的最长子串(滑动窗口)

Problem: 3. 无重复字符的最长子串 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 由于题目要求求出字符串中最长的连续无重复字符的最长子串&#xff0c;所以利用这个特性我们可以比较容易的想到利用双指针中的滑动窗口技巧来解决&#xff0c;但在实际的求解中…

【学网攻】 第(14)节 -- 动态路由(EIGRP)

系列文章目录 目录 系列文章目录 文章目录 前言 一、动态路由EIGRP是什么&#xff1f; 二、实验 1.引入 实验步骤 实验拓扑图 实验配置 看到D开头是便是我们的EIGRP动态路由 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学…

微信小程序(二十二)获取全局实例

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.全局实例的定义位置 2.全局实例中数据的修改方法 源码&#xff1a; app.js App({//数据可以包括在第二级globalData:{userInfo:null,token:1243,userInfo:null},//globalData并不是关键词&#xff0c;数据可以…
最新文章