在一个新的Ember 3.20项目中(也与3.19相同),添加一个新组件后。
application.hbs:
<Test @foo="hello" />
组件/测试.js:
import Component from '@glimmer/component';
export default class TestComponent extends Component {
constructor(){
super(...arguments)
console.log(this.args)
}
}
控制台:* 代理服务器{}*
如何在构造函数中访问这个.args参数?
1条答案
按热度按时间dohp0rv51#
组件的args是一个代理,这样特殊的行为可以 Package 对args的访问。例如,当你访问其中一个args时--只有在那时args才会被“消费”,而你的getter/actions与那个args的状态纠缠在一起。这有一个好处,那就是在默认情况下优化你的更改跟踪,所以如果你传递了100个args,并且在你的组件中只使用其中的一两个,您不必为导致组件更新的100个参数付出代价。
它的工作原理是这样的:
其中,通常情况下,如果你只有一个普通对象,那么访问arg只会得到值。
有关自动跟踪的更多信息,@pzuraq将在此处进行深入探讨:https://www.pzuraq.com/how-autotracking-works/(不一定要在 ember 中自动跟踪,但一般情况下 * 更多)
此外,如果您感兴趣,请参阅
Proxy
相关文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy