emberjs / emberjs/ember.js

@tracked: lazy evaluation

Open
#18,118 5 comments 0 reactions 0 assignees View on GitHub
documentation good first issue
Dominant language
TypeScript
Stars
22.6k
Forks
4.2k
Avg merge
3d 12h
Merged PRs (30d)
15

Description

While investigating #18075, I noticed a minor issue, that persists even after the change to `WeakMap` in #18091, because of the lazy evaluation

```ts
class Foo {
@service someService;

@tracked someProp = this.someService.serviceProp;
}
```

Assume `Foo` gets created by a container lookup or get manually called
`setOwner` on.

_Intuitively_ I would expect the above code to work. And it does.
If `this.someProp` is only accessed later in the template or in `init`, everything works fine.

However, if you already access `this.someProp` in the `constructor`, you get a `TypeError`, because `this.someService` is `undefined`.

While I understand why, I still think this is inconsistent. If we decide to keep lazy evaluation of the initializers, we need to document it well. Would the new static decorators proposal support lazy evaluation in the first place?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.