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使用引用时异常
1094浏览 • 1回复 待解决
#鸿蒙通关秘籍#一层层嵌套写的太烦了有没有简单一点的方法的?
243浏览 • 1回复 待解决
HarmonyOS @builder引用传递问题
321浏览 • 0回复 待解决
HarmonyOS 在@builder中使用引用传递无法触发UI刷新
46浏览 • 1回复 待解决
HarmonyOS @Builder的内容如何刷新
158浏览 • 1回复 待解决
HarmonyOS @Builder嵌套二层传递状态变量无法识别
101浏览 • 1回复 待解决
HarmonyOS 使用NodeController嵌套第二层builder无法更新UI
51浏览 • 1回复 待解决
HarmonyOS @builder方法的ui不刷新
265浏览 • 1回复 待解决
HarmonyOS @Builder UI刷新问题
130浏览 • 1回复 待解决
所有的视图组件都套了一层 viewbase,这样会不会影响布局性能
1794浏览 • 1回复 待解决
HarmonyOS Builder 函数作为一个控件的入参,Builder 函数的click this没有指向原始的this
245浏览 • 1回复 待解决
HarmonyOS builder 作为 builder 的参数传递
206浏览 • 1回复 待解决
HarmonyOS 自定义builder方法, 参数是按引用传递, 当状态值修改时, 不触发builder方法, 不会刷新UI
651浏览 • 1回复 待解决
HarmonyOS BuilderParam传入的Builder方法刷新问题
62浏览 • 1回复 待解决
HarmonyOS 想在builder中插入builder
150浏览 • 1回复 待解决
HarmonyOS @Builder 按引用传递参数编译错误
258浏览 • 1回复 待解决
HarmonyOS 想要通过@State修饰的变量刷新@Builder方法内的UI,只能通过引用传递参数吗?
214浏览 • 1回复 待解决
HarmonyOS 嵌套一层的数组无法监听相同数据增加,但是无嵌套的数组可以监听相同数据增加
288浏览 • 1回复 待解决
HarmonyOS 通过向子组件传递builder时,组件复用没有生效
201浏览 • 1回复 待解决
HarmonyOS @State状态量刷新、@Builder不会响应变化
178浏览 • 0回复 待解决
HarmonyOS 如何将一个 Builder 作为参数传个另一个 Builder?
355浏览 • 1回复 待解决
HarmonyOS 画中画返回上一层的NavDestination
164浏览 • 1回复 待解决
HarmonyOS 按Refresh组件示例代码,在不刷新的常规场景时候,builder内的组件也会露出一半
409浏览 • 1回复 待解决
HarmonyOS 有没有办法动态添加组件?
822浏览 • 1回复 待解决
HarmonyOS router.back()上一层页面怎么触发@State标识的数据刷新页面
229浏览 • 1回复 待解决
1.Builder调用Builder的时候,需要按照键值对的形式传入。
2.Builder传参的时候需要使用$$。