HarmonyOS鸿蒙Next中tabs导航页重新进入子组件的时候,参数传递异常

HarmonyOS鸿蒙Next中tabs导航页重新进入子组件的时候,参数传递异常 tabs页面"我的"栏目,进入子页面的时候,进行了传参(page页码参数 和 array 数据默认显示的数组内容)

在首次进入“我的”栏的时候,一切正常,页码参数是默认传的1,列表是第一页的列表数据,也没有问题,当我下拉刷新,page更新为2的时候,切换到其他tab栏,再切换回来,我的预期是页码,及列表数据重新传值进行重置,但实际效果是 列表重置为了第一页数据,这没问题,但是页码却还是之前翻页之后更新的2,但tabs传参的时候,页码和数组是一起传的,怎么会出现数组数据传递过去了,页码没传递过去的情况?页码我写死,传1也是一样的结果


更多关于HarmonyOS鸿蒙Next中tabs导航页重新进入子组件的时候,参数传递异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

@Prop变量装饰器 子组件不要在修改;可以使用内部变量接受下@Prop变量;

若想要数据更新后 显示也要更新,使用@State 修饰变量,直接使用@Prop 变量 不会改变;

[@Prop](/user/Prop) @Watch('updatePage') minePagePage1:number = 1

@State currentPage:number = 1

updatePage(){ this.currentPage = this.minePagePage1 }

内部处理 都使用this.currentPage 替换this.minePagePage1

更多关于HarmonyOS鸿蒙Next中tabs导航页重新进入子组件的时候,参数传递异常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


感谢兄台的思路,

我写的话 ,基本上是不传参进来的,数组和分页参数都是在 类似你写的HomeMainPage页面中

好的,谢谢,你这个思路我也考虑过,但是在自定义组件页中,onpageshow()方法无法默认加载,请问一下,我如何在进入这个组件页的时候进行页面数据初始化?(本人接触前端开发不久,有什么低级问题望见谅),

aboutToAppear() {
  // 初始化数据
}

如何将HTML转换为Markdown

1. 使用在线工具

  • 工具推荐:Pandoc、Turndown、HTML to Markdown转换器
  • 操作步骤
    1. 复制HTML代码
    2. 粘贴到在线工具中
    3. 点击转换按钮
    4. 复制生成的Markdown代码

2. 使用命令行工具(Pandoc)

  • 安装Pandoc

    # macOS
    brew install pandoc
    
    # Ubuntu/Debian
    sudo apt-get install pandoc
    
    # Windows
    # 从官网下载安装包
    
  • 转换命令

    pandoc input.html -o output.md
    

3. 使用编程库

  • Node.js

    const TurndownService = require('turndown');
    const turndownService = new TurndownService();
    const markdown = turndownService.turndown(htmlString);
    
  • Python

    import html2text
    h = html2text.HTML2Text()
    markdown = h.handle(html_string)
    

4. 手动转换常用标签对照表

HTML标签 Markdown语法
<h1> # 标题
<p> 直接文本
<a href="url"> [链接文本](url)
<img src="image.jpg" alt="描述"> ![描述](image.jpg)
<ul><li> - 列表项
<ol><li> 1. 列表项
<strong> **加粗**
<em> *斜体*
<code> `代码`
<blockquote> > 引用内容

5. 注意事项

  • 表格转换可能需要特殊处理
  • 复杂布局可能无法完美转换
  • 建议转换后检查格式是否正确

6. 最佳实践

  1. 先使用工具自动转换
  2. 手动调整格式细节
  3. 检查链接和图片是否正确转换
  4. 确保代码块语法正确

通过以上方法,您可以高效地将HTML内容转换为Markdown格式。

在HarmonyOS Next中,Tabs导航页重新进入子组件时参数传递异常,通常是由于Tabs组件的缓存机制导致。子组件可能未正确响应参数更新,或生命周期函数未触发。检查子组件是否使用@State@Prop装饰器接收参数,并确保在aboutToAppear()中处理参数逻辑。避免直接修改传入的参数对象,建议使用新对象赋值来触发更新。

这个问题通常是由于Tabs组件的生命周期和状态管理机制导致的。在HarmonyOS Next中,当切换Tab时,非活动Tab对应的页面内容可能被缓存或保留状态,而不是每次切换都重新创建。

核心原因分析:

  1. 状态保留:Tabs组件默认会保留每个Tab页的状态,包括子组件的内部状态(如页码变量)。
  2. 参数传递时机:从父组件传递的参数只在子组件初始创建时生效,后续切换Tab时,如果子组件未被销毁,则不会重新接收参数。
  3. 数据不同步:你的列表数据通过参数重置了,但页码变量作为子组件内部状态被保留,导致两者不一致。

解决方案:

方案一:使用@State管理关键状态 在子组件中,将页码定义为@State装饰的变量,并在aboutToAppear生命周期中根据传入参数重置:

[@State](/user/State) currentPage: number = 1

aboutToAppear() {
  // 从参数中获取并重置页码
  this.currentPage = this.pageParam
}

方案二:使用@Watch监听参数变化 当参数变化时自动更新内部状态:

@Prop [@Watch](/user/Watch)('onPageParamChange') pageParam: number
[@State](/user/State) currentPage: number = 1

onPageParamChange() {
  this.currentPage = this.pageParam
}

方案三:强制刷新子组件 在父组件中,通过条件渲染或key值变化强制子组件重新创建:

// 在Tabs的Content中使用key
Tabs() {
  TabContent() {
    if (this.activeTab === 'mine') {
      ChildComponent({ key: this.refreshKey })
    }
  }
}

方案四:使用统一状态管理 将页码状态提升到父组件或使用AppStorage进行全局管理,确保状态一致性。

推荐采用方案一或方案二,这符合HarmonyOS的状态管理最佳实践。需要确保在aboutToAppear中正确处理参数到状态的同步,这样每次Tab切换时都能正确重置页码。

回到顶部