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使用引用时异常
800浏览 • 1回复 待解决
HarmonyOS 自定义builder方法, 参数是按引用传递, 当状态值修改时, 不触发builder方法, 不会刷新UI
310浏览 • 1回复 待解决
所有的视图组件都套了一层 viewbase,这样会不会影响布局性能
1498浏览 • 1回复 待解决
HarmonyOS 能不能支持传组件内的Builder?
128浏览 • 1回复 待解决
HarmonyOS 按Refresh组件示例代码,在不刷新的常规场景时候,builder内的组件也会露出一半
198浏览 • 1回复 待解决
HarmonyOS 全局带参builder调用bind(this)时如何传参?
298浏览 • 1回复 待解决
HarmonyOS 如何在builder函数中传入组件
221浏览 • 0回复 待解决
@Extend、@Styles、@Builder 区别?
329浏览 • 1回复 待解决
HarmonyOS 有没有办法动态添加组件?
254浏览 • 1回复 待解决
HarmonyOS 在builder中使用自定义组件报错
164浏览 • 1回复 待解决
HarmonyOS 设置overlay之后,浮层会盖住,那么下面一层的手势如何识别?
169浏览 • 1回复 待解决
builder修饰的快速组件化方法能使用Button吗
1905浏览 • 0回复 待解决
订阅emitter分享,谁有更好的办法?
630浏览 • 1回复 待解决
HarmonyOS在Native层的其他的子线程的回调数据不能直接回抛给UI层,有没有好的办法?
257浏览 • 1回复 待解决
HarmonyOS @builder创建的组件能否支持在外部设置宽高
317浏览 • 1回复 待解决
HarmonyOS 刷新列表中的某个ITEM,会导致整个ITEM都刷新,有单独刷新某个控件的办法吗?
291浏览 • 1回复 待解决
预览器@builder封装的组件不支持@priview预览
48浏览 • 1回复 待解决
有没有什么办法给组件新增方法?
678浏览 • 1回复 待解决
HarmonyOS WrappedBuilder的使用。如何动态更新全局@Builder
463浏览 • 1回复 待解决
如何将点击事件透传到下一层
1806浏览 • 1回复 待解决
能否把一个@Builder修饰的组件以参数形式去传入到另外一个组件中
2045浏览 • 1回复 待解决
@Builder装饰器的参数传递规则有哪些?
361浏览 • 1回复 待解决
有没有调用日历的接口?
6240浏览 • 1回复 待解决
HarmonyOS 有没有办法能计算Text文本的行数?
160浏览 • 1回复 待解决
1.Builder调用Builder的时候,需要按照键值对的形式传入。
2.Builder传参的时候需要使用$$。