HarmonyOS 鸿蒙Next: @localstoragelink 日志报错
HarmonyOS 鸿蒙Next: @localstoragelink 日志报错
使用 @LocalStorageLink('screen2modeId')
screen2modeId
: Map<string, number>
= new Map()
在多个组件间共享值,主要是一个父组件和多种类型子组件(一般只显示一个),父组件中会切换显示子组件,有在同种类型子组件切换和不同中类型子组件切换,当在同种类型子组件切换时,日志会打印FIX THIS APPLICATION ERROR: [@Component](/user/Component) 'CenterScreen'[154]: State variable 'screen2modeId' has changed during render!
It’s illegal to change @Component state while build (initial render or re-render) is on-going. Application error,
我在子组件中使用@watch
监听了切换时的状态变化,并在
中都使用了screen2modeId
的值,是这两个导致的吗
更多关于HarmonyOS 鸿蒙Next: @localstoragelink 日志报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个报错的原因是在build中有修改状态变量,这是不允许的,可以先排查一下应用中是否有在build中修改状态变量的情况。
更多关于HarmonyOS 鸿蒙Next: @localstoragelink 日志报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
screen2modeId是@link修饰的,我只在子组件set值,是在更新一个状态变量borderColors 之后,borderColors 参与了一个foreach布局的构建,会是这个原因吗
updateBorderGrid(modeId: number) {
console.log(this.TAG, 'updateBorderGrid', modeId);
const row = mathUtil.parseMatrixDimension(modeId).rows;
const column = mathUtil.parseMatrixDimension(modeId).columns;
this.borderColors = new Array(this.rows * this.columns).fill('#2a5c93');
this.screen2modeId.set(this.outPutDto!!.ip, modeId);
}
@Component 'CenterScreen'[154]:在渲染过程中,状态变量 'screen2modeId' 发生了变化!在构建(初始渲染或重新渲染)进行时更改 @Component 状态是非法的。应用程序错误。
错误信息很明确了。
screen2modeId是@link修饰的,我只在子组件set值,是在更新一个状态变量borderColors 之后,borderColors 参与了一个foreach布局的构建,会是这个原因吗
updateBorderGrid(modeId: number {
console.log(this.TAG, 'updateBorderGrid', modeId)
const row = mathUtil.parseMatrixDimension(modeId).rows
const column = mathUtil.parseMatrixDimension(modeId).columns
this.borderColors = new Array(this.rows * this.columns).fill('#2a5c93')
this.screen2modeId.set(this.outPutDto!!.ip, modeId)}
这是因为,渲染是异步的过程。渲染的时候,你又去修改这个值,就会报这个错误。
请问有什么修改方法吗,borderColors渲染组件之后再去修改screen2modeId的值?感觉也不能确定呀,用@watch监听borderColors 修改再更改screen2modeId?
在HarmonyOS(鸿蒙)Next中,@localstoragelink
是一个用于绑定本地存储数据的装饰器。如果在使用 @localstoragelink
时出现日志报错,可能是由于以下原因:
- 数据类型不匹配:
@localstoragelink
绑定的数据类型与预期的数据类型不一致,导致数据无法正确存储或读取。 - 存储键名冲突:
@localstoragelink
使用的键名与已有的本地存储键名冲突,导致数据覆盖或读取错误。 - 存储限制:本地存储空间有限,如果存储的数据量超过了限制,可能会导致存储失败或报错。
- 异步操作问题:
@localstoragelink
涉及的存储操作可能是异步的,如果在数据未完全写入或读取时进行操作,可能会导致报错。 - 权限问题:应用程序可能没有足够的权限访问本地存储,导致存储操作失败。
- 框架或API版本问题:使用的
@localstoragelink
可能依赖于特定的HarmonyOS框架或API版本,版本不匹配可能导致功能异常。 - 存储数据格式错误:存储的数据格式不符合预期,例如存储了非字符串或非JSON格式的数据,导致解析错误。
- 组件生命周期问题:
@localstoragelink
绑定的数据可能在组件生命周期中未正确初始化或销毁,导致数据状态异常。
这些是可能导致 @localstoragelink
日志报错的常见原因。具体问题需要根据日志内容进行进一步分析。