HarmonyOS Builder组件嵌套调用时,每个Builder都需要包一层引用才能刷新,有没有更好的办法?
咨询描述:
// fail 问题:无法展示(因为没有wrapper),点击后也无法刷新。
@Builder
function BuildMyDataInnerInner(inner: MyDataInnerInner) {
if (inner instanceof MyDataInnerInner) {
Text(inner.msg + ' ').width('100%').height('100%')
}else {
// 其他判断逻辑
}
}
@Builder
function BuildMyDataInner(inner: MyDataInner) {
if (inner instanceof MyDataInner) {
BuildMyDataInnerInner(inner.inner)
}else {
// 其他判断逻辑
}
}
@Builder
function BuildMyData(wrapper: IDataWrapper) {
if (wrapper instanceof MyData) {
BuildMyDataInner(wrapper.inner)
}else {
// 其他判断逻辑
}
}
@Component
export struct TestParentParent {
private name: string = "TestParentParent";
build() {
TestParent({
outerBuilder: BuildMyData
})
}
}
class MyDataInnerInner {
msg: number;
constructor(msg: number) {
this.msg = msg;
}
}
class MyDataInner {
inner: MyDataInnerInner;
constructor(inner: MyDataInnerInner) {
this.inner = inner;
}
}
/**
* 需要自定义数据,包一层
*/
class MyData {
inner: MyDataInner;
constructor(inner: MyDataInner) {
this.inner = inner;
}
}
@Component
struct TestParent {
@BuilderParam outerBuilder: (wrapper: IDataWrapper) => void
build() {
TestChild({
outerBuilder: this.outerBuilder
})
}
}
interface IDataWrapper {
data: Object
}
@Component
struct TestChild {
@State data: Object = new MyData(new MyDataInner(new MyDataInnerInner(111)));
@BuilderParam outerBuilder: (wrapper: IDataWrapper) => void
build() {
Stack() {
this.outerBuilder({
data: this.data
})
Button("Click").onClick(() => {
this.data = new MyData(new MyDataInner(new MyDataInnerInner(222)));
})
}.width('100%').height('100%')
}
}
// success 问题:可以展示,点击后也可以刷新,但每个builder都要包一层,过于繁琐
@Builder
function BuildMyDataInnerInner(inner: IDataWrapper<MyDataInnerInner>) {
if (inner.data instanceof MyDataInnerInner) {
Text(inner.data.msg + ' ').width('100%').height('100%')
}else {
// 其他判断逻辑
}
}
@Builder
function BuildMyDataInner(innerWrapper: IDataWrapper<MyDataInner>) {
if (innerWrapper.data instanceof MyDataInner) {
BuildMyDataInnerInner({
data: innerWrapper.data.inner
})
}else {
// 其他判断逻辑
}
}
@Builder
function BuildMyData(wrapper: IDataWrapper<Object>) {
if (wrapper.data instanceof MyData) {
BuildMyDataInner({
data: wrapper.data.inner
})
}else {
// 其他判断逻辑
}
}
@Component
export struct TestParentParent {
private name: string = "TestParentParent";
build() {
TestParent({
outerBuilder: BuildMyData
})
}
}
class MyDataInnerInner {
msg: number;
constructor(msg: number) {
this.msg = msg;
}
}
class MyDataInner {
inner: MyDataInnerInner;
constructor(inner: MyDataInnerInner) {
this.inner = inner;
}
}
/**
* 需要自定义数据,包一层
*/
class MyData {
inner: MyDataInner;
constructor(inner: MyDataInner) {
this.inner = inner;
}
}
@Component
struct TestParent {
@BuilderParam outerBuilder: (wrapper: IDataWrapper<Object>) => void
build() {
TestChild({
outerBuilder: this.outerBuilder
})
}
}
interface IDataWrapper<T> {
data: T
}
@Component
struct TestChild {
@State data: Object = new MyData(new MyDataInner(new MyDataInnerInner(111)));
@BuilderParam outerBuilder: (wrapper: IDataWrapper<Object>) => void
build() {
Stack() {
this.outerBuilder({
data: this.data
})
Button("Click").onClick(() => {
this.data = new MyData(new MyDataInner(new MyDataInnerInner(222)));
})
}.width('100%').height('100%')
}
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
@Builder使用引用时异常
1658浏览 • 1回复 待解决
#鸿蒙通关秘籍#一层层嵌套写的太烦了有没有简单一点的方法的?
977浏览 • 1回复 待解决
HarmonyOS @builder引用传递问题
1695浏览 • 1回复 待解决
HarmonyOS 在@builder中使用引用传递无法触发UI刷新
813浏览 • 1回复 待解决
HarmonyOS @Builder的内容如何刷新
864浏览 • 1回复 待解决
HarmonyOS @Builder嵌套二层传递状态变量无法识别
869浏览 • 1回复 待解决
HarmonyOS @builder方法的ui不刷新
1811浏览 • 1回复 待解决
HarmonyOS 使用NodeController嵌套第二层builder无法更新UI
1167浏览 • 1回复 待解决
HarmonyOS @Builder UI刷新问题
1021浏览 • 1回复 待解决
所有的视图组件都套了一层 viewbase,这样会不会影响布局性能
2668浏览 • 1回复 待解决
HarmonyOS Builder 函数作为一个控件的入参,Builder 函数的click this没有指向原始的this
974浏览 • 1回复 待解决
HarmonyOS builder 作为 builder 的参数传递
1404浏览 • 1回复 待解决
HarmonyOS 自定义builder方法, 参数是按引用传递, 当状态值修改时, 不触发builder方法, 不会刷新UI
1567浏览 • 1回复 待解决
HarmonyOS BuilderParam传入的Builder方法刷新问题
796浏览 • 1回复 待解决
HarmonyOS 想在builder中插入builder
793浏览 • 1回复 待解决
HarmonyOS @Builder 按引用传递参数编译错误
1020浏览 • 1回复 待解决
HarmonyOS 想要通过@State修饰的变量刷新@Builder方法内的UI,只能通过引用传递参数吗?
1564浏览 • 1回复 待解决
HarmonyOS 通过向子组件传递builder时,组件复用没有生效
932浏览 • 1回复 待解决
HarmonyOS @State状态量刷新、@Builder不会响应变化
1073浏览 • 1回复 待解决
HarmonyOS 嵌套一层的数组无法监听相同数据增加,但是无嵌套的数组可以监听相同数据增加
1017浏览 • 1回复 待解决
HarmonyOS 如何将一个 Builder 作为参数传个另一个 Builder?
1424浏览 • 1回复 待解决
HarmonyOS 按Refresh组件示例代码,在不刷新的常规场景时候,builder内的组件也会露出一半
1180浏览 • 1回复 待解决
HarmonyOS 画中画返回上一层的NavDestination
1019浏览 • 1回复 待解决
HarmonyOS 有没有办法动态添加组件?
2324浏览 • 1回复 待解决
HarmonyOS 使用@builder和@builderParam时,@builder中的ui不会动态更新
1950浏览 • 1回复 待解决
1.Builder调用Builder的时候,需要按照键值对的形式传入。
2.Builder传参的时候需要使用$$。