admin管理员组文章数量:1037775
107.HarmonyOS NEXT 跑马灯组件详解(三): 数据结构与状态管理
温馨提示:本篇博客的详细代码已发布到 git : 可以下载运行哦!
HarmonyOS NEXT 跑马灯组件详解(三): 数据结构与状态管理
效果演示
1. 数据类型定义
1.1 行程数据类型
代码语言:typescript复制interface TripDataType {
trainNumber: string; // 车次号
wholeCourse: string; // 全程
startingTime: string; // 出发时间
endingTime: string; // 到达时间
origin: string; // 始发站
destination: string; // 终点站
timeDifference: string; // 时间差
ticketEntrance: ResourceStr; // 票务入口
vehicleModel: string; // 车型
}
1.2 常量定义
代码语言:typescript复制const Constants = {
ANGLE: 180,
ANIMATION_DURATION: 8000,
DELAY_TIME: 1000,
BLANK_SPACE: 100,
DEFAULT_SCROLL_WIDTH: '300vp'
}
2. 状态管理
2.1 组件状态声明
代码语言:typescript复制@Component
struct TripView {
// 使用@State装饰器管理数据源状态
@State tripData: TripDataSource = new TripDataSource();
}
2.2 状态更新机制
- 自动更新:// 当tripData发生变化时,组件会自动重新渲染 this.tripData = new TripDataSource();
- 数据绑定:LazyForEach(this.tripData, (item: TripDataType) => { TripMessage({ tripDataItem: item }) })
3. 数据源实现
3.1 TripDataSource类
代码语言:typescript复制export class TripDataSource implements IDataSource {
private tripList: TripDataType[] = [];
// 实现IDataSource接口的必要方法
totalCount(): number {
return this.tripList.length;
}
getData(index: number): TripDataType {
return this.tripList[index];
}
}
3.2 数据加载和更新
代码语言:typescript复制class TripDataSource {
// 初始化数据
constructor() {
this.loadData();
}
// 加载数据方法
private loadData() {
// 可以从服务器或本地加载数据
this.tripList = [
{
trainNumber: 'G1234',
wholeCourse: '北京-上海',
startingTime: '08:00',
endingTime: '13:00',
// ... 其他数据
}
// ... 更多数据
];
}
}
4. 属性传递
4.1 组件属性定义
代码语言:typescript复制@Component
struct TripMessage {
// 私有属性,用于接收父组件传递的数据
private tripDataItem: TripDataType = {} as TripDataType;
}
4.2 属性使用
代码语言:typescript复制TripMessage({
tripDataItem: item // 传递数据给子组件
})
5. 状态同步
5.1 父子组件通信
代码语言:typescript复制@Component
struct ParentComponent {
@State parentData: string = '';
build() {
ChildComponent({
data: this.parentData,
onDataChange: (newValue: string) => {
this.parentData = newValue;
}
})
}
}
5.2 状态监听
代码语言:typescript复制@Component
struct ChildComponent {
@Prop data: string;
onDataChange: (value: string) => void;
build() {
// 使用传入的数据和回调
}
}
6. 性能优化
6.1 懒加载实现
代码语言:typescript复制LazyForEach(this.tripData, (item: TripDataType) => {
TripMessage({
tripDataItem: item
})
}, (item: TripDataType) => JSON.stringify(item))
6.2 数据缓存
代码语言:typescript复制class TripDataSource {
private cache: Map<string, TripDataType> = new Map();
getData(index: number): TripDataType {
const key = `trip_${index}`;
if (!this.cache.has(key)) {
this.cache.set(key, this.tripList[index]);
}
return this.cache.get(key);
}
}
7. 最佳实践
7.1 状态管理原则
- 最小化状态:只将必要的数据声明为状态
- 合理的状态粒度:避免过大或过小的状态
- 单一数据源:避免重复的状态声明
- 及时清理:不再需要的状态及时释放
7.2 数据处理建议
- 数据验证:private validateTripData(data: TripDataType): boolean { return data && data.trainNumber && data.wholeCourse; }
- 错误处理:try { this.loadData(); } catch (error) { console.error('Failed to load trip data:', error); }
- 数据转换:private formatTripData(raw: any): TripDataType { return { trainNumber: raw.trainNumber || '', wholeCourse: raw.wholeCourse || '', // ... 其他字段处理 }; }
8. 调试技巧
8.1 状态监控
代码语言:typescript复制@State
@Watch('onTripDataChange')
tripData: TripDataSource = new TripDataSource();
onTripDataChange() {
console.info('Trip data changed:', this.tripData);
}
8.2 性能分析
代码语言:typescript复制private measurePerformance() {
const start = performance.now();
// 执行操作
const end = performance.now();
console.info('Operation took:', end - start, 'ms');
}
通过以上详细的讲解,你应该已经掌握了跑马灯组件中数据结构和状态管理的核心概念。这些知识将帮助你更好地理解和使用该组件,同时也能够在开发类似组件时应用这些最佳实践。
107.HarmonyOS NEXT 跑马灯组件详解(三): 数据结构与状态管理
温馨提示:本篇博客的详细代码已发布到 git : 可以下载运行哦!
HarmonyOS NEXT 跑马灯组件详解(三): 数据结构与状态管理
效果演示
1. 数据类型定义
1.1 行程数据类型
代码语言:typescript复制interface TripDataType {
trainNumber: string; // 车次号
wholeCourse: string; // 全程
startingTime: string; // 出发时间
endingTime: string; // 到达时间
origin: string; // 始发站
destination: string; // 终点站
timeDifference: string; // 时间差
ticketEntrance: ResourceStr; // 票务入口
vehicleModel: string; // 车型
}
1.2 常量定义
代码语言:typescript复制const Constants = {
ANGLE: 180,
ANIMATION_DURATION: 8000,
DELAY_TIME: 1000,
BLANK_SPACE: 100,
DEFAULT_SCROLL_WIDTH: '300vp'
}
2. 状态管理
2.1 组件状态声明
代码语言:typescript复制@Component
struct TripView {
// 使用@State装饰器管理数据源状态
@State tripData: TripDataSource = new TripDataSource();
}
2.2 状态更新机制
- 自动更新:// 当tripData发生变化时,组件会自动重新渲染 this.tripData = new TripDataSource();
- 数据绑定:LazyForEach(this.tripData, (item: TripDataType) => { TripMessage({ tripDataItem: item }) })
3. 数据源实现
3.1 TripDataSource类
代码语言:typescript复制export class TripDataSource implements IDataSource {
private tripList: TripDataType[] = [];
// 实现IDataSource接口的必要方法
totalCount(): number {
return this.tripList.length;
}
getData(index: number): TripDataType {
return this.tripList[index];
}
}
3.2 数据加载和更新
代码语言:typescript复制class TripDataSource {
// 初始化数据
constructor() {
this.loadData();
}
// 加载数据方法
private loadData() {
// 可以从服务器或本地加载数据
this.tripList = [
{
trainNumber: 'G1234',
wholeCourse: '北京-上海',
startingTime: '08:00',
endingTime: '13:00',
// ... 其他数据
}
// ... 更多数据
];
}
}
4. 属性传递
4.1 组件属性定义
代码语言:typescript复制@Component
struct TripMessage {
// 私有属性,用于接收父组件传递的数据
private tripDataItem: TripDataType = {} as TripDataType;
}
4.2 属性使用
代码语言:typescript复制TripMessage({
tripDataItem: item // 传递数据给子组件
})
5. 状态同步
5.1 父子组件通信
代码语言:typescript复制@Component
struct ParentComponent {
@State parentData: string = '';
build() {
ChildComponent({
data: this.parentData,
onDataChange: (newValue: string) => {
this.parentData = newValue;
}
})
}
}
5.2 状态监听
代码语言:typescript复制@Component
struct ChildComponent {
@Prop data: string;
onDataChange: (value: string) => void;
build() {
// 使用传入的数据和回调
}
}
6. 性能优化
6.1 懒加载实现
代码语言:typescript复制LazyForEach(this.tripData, (item: TripDataType) => {
TripMessage({
tripDataItem: item
})
}, (item: TripDataType) => JSON.stringify(item))
6.2 数据缓存
代码语言:typescript复制class TripDataSource {
private cache: Map<string, TripDataType> = new Map();
getData(index: number): TripDataType {
const key = `trip_${index}`;
if (!this.cache.has(key)) {
this.cache.set(key, this.tripList[index]);
}
return this.cache.get(key);
}
}
7. 最佳实践
7.1 状态管理原则
- 最小化状态:只将必要的数据声明为状态
- 合理的状态粒度:避免过大或过小的状态
- 单一数据源:避免重复的状态声明
- 及时清理:不再需要的状态及时释放
7.2 数据处理建议
- 数据验证:private validateTripData(data: TripDataType): boolean { return data && data.trainNumber && data.wholeCourse; }
- 错误处理:try { this.loadData(); } catch (error) { console.error('Failed to load trip data:', error); }
- 数据转换:private formatTripData(raw: any): TripDataType { return { trainNumber: raw.trainNumber || '', wholeCourse: raw.wholeCourse || '', // ... 其他字段处理 }; }
8. 调试技巧
8.1 状态监控
代码语言:typescript复制@State
@Watch('onTripDataChange')
tripData: TripDataSource = new TripDataSource();
onTripDataChange() {
console.info('Trip data changed:', this.tripData);
}
8.2 性能分析
代码语言:typescript复制private measurePerformance() {
const start = performance.now();
// 执行操作
const end = performance.now();
console.info('Operation took:', end - start, 'ms');
}
通过以上详细的讲解,你应该已经掌握了跑马灯组件中数据结构和状态管理的核心概念。这些知识将帮助你更好地理解和使用该组件,同时也能够在开发类似组件时应用这些最佳实践。
本文标签: 107HarmonyOS NEXT跑马灯组件详解(三) 数据结构与状态管理
版权声明:本文标题:107.HarmonyOS NEXT跑马灯组件详解(三): 数据结构与状态管理 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1748238964a2273791.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论