在Glimmer.js中,在不使用构造函数的情况下将跟踪的属性重置为初始值的最佳方法是什么?
注意:不能使用构造函数,因为它在初始页面呈现中只被调用一次,而在随后的页面单击时就不再被调用了。
发布于 2020-09-18 17:11:08
这个答案有两个部分,但它们之间的共同主题是,它们强调从命令式样式(在生命周期挂钩中显式设置值)转换为声明式样式(使用真正的单向数据流和/或使用修饰器来明确表示您正在根据参数对本地状态进行某种转换)。
didInsertElement或didReceiveAttrs这样的钩子来获取“分叉”数据的模式。在微光组件中(无论是在Ember辛烷值还是在独立的Glimmer.js中),简单地在数据所有者中管理您的更新是习以为常的:真正地执行数据向下操作-向上操作。@localCopy和@trackedReset的履带工具箱装饰器是很好的解决方案。- `@localCopy` does roughly what its name suggests. It creates a local copy of data passed in via arguments, which you can change _locally_ via actions, but which also switches back to the argument if the argument value changes.- `@trackedReset` creates some local state which _resets_ when an argument updates. Unlike `@localCopy`, the state is _not_ a copy of the argument, it just needs to reset when the argument updates.与以前的Ember经典方法相比,使用这两种方法都可以获得更多的“声明性”数据流:“分叉”数据是通过装饰器完成的(方法2),而且大部分时间您根本没有分叉它,因为您只是将更改推回原始数据的所有者(1)。
https://stackoverflow.com/questions/63959410
复制相似问题