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使用引用时异常
921浏览 • 1回复 待解决
#鸿蒙通关秘籍#一层层嵌套写的太烦了有没有简单一点的方法的?
97浏览 • 1回复 待解决
HarmonyOS @Builder的内容如何刷新
54浏览 • 1回复 待解决
所有的视图组件都套了一层 viewbase,这样会不会影响布局性能
1572浏览 • 1回复 待解决
HarmonyOS 自定义builder方法, 参数是按引用传递, 当状态值修改时, 不触发builder方法, 不会刷新UI
495浏览 • 1回复 待解决
HarmonyOS @Builder 按引用传递参数编译错误
62浏览 • 1回复 待解决
HarmonyOS 想在builder中插入builder
48浏览 • 1回复 待解决
HarmonyOS 嵌套一层的数组无法监听相同数据增加,但是无嵌套的数组可以监听相同数据增加
46浏览 • 1回复 待解决
HarmonyOS 按Refresh组件示例代码,在不刷新的常规场景时候,builder内的组件也会露出一半
302浏览 • 1回复 待解决
HarmonyOS 如何将一个 Builder 作为参数传个另一个 Builder?
135浏览 • 1回复 待解决
HarmonyOS 有没有办法动态添加组件?
505浏览 • 1回复 待解决
HarmonyOS router.back()上一层页面怎么触发@State标识的数据刷新页面
57浏览 • 1回复 待解决
HarmonyOS 如何在builder函数中传入组件
374浏览 • 0回复 待解决
HarmonyOS 使用@builder和@builderParam时,@builder中的ui不会动态更新
370浏览 • 1回复 待解决
HarmonyOS 全局带参builder调用bind(this)时如何传参?
422浏览 • 1回复 待解决
HarmonyOS 能不能支持传组件内的Builder?
233浏览 • 1回复 待解决
HarmonyOS在Native层的其他的子线程的回调数据不能直接回抛给UI层,有没有好的办法?
341浏览 • 1回复 待解决
HarmonyOS 刷新列表中的某个ITEM,会导致整个ITEM都刷新,有单独刷新某个控件的办法吗?
584浏览 • 1回复 待解决
HarmonyOS 使用OHAudio 需要引用哪个so包?
29浏览 • 1回复 待解决
订阅emitter分享,谁有更好的办法?
739浏览 • 1回复 待解决
有没有什么办法给组件新增方法?
756浏览 • 1回复 待解决
HarmonyOS 设置overlay之后,浮层会盖住,那么下面一层的手势如何识别?
262浏览 • 1回复 待解决
@Extend、@Styles、@Builder 区别?
445浏览 • 1回复 待解决
HarmonyOS 在builder中使用自定义组件报错
381浏览 • 1回复 待解决
1.Builder调用Builder的时候,需要按照键值对的形式传入。
2.Builder传参的时候需要使用$$。