Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix #9046 disable dep collection when invoking lifecycle hooks will be useless when invoking computed in lifecycle #9095

Merged
merged 5 commits into from
Dec 1, 2018

Conversation

ysj16
Copy link
Contributor

@ysj16 ysj16 commented Nov 20, 2018

What kind of change does this PR introduce? (check at least one)

  • Bugfix
  • Feature
  • Code style update
  • Refactor
  • Build-related changes
  • Other, please describe:

Does this PR introduce a breaking change? (check one)

  • Yes
  • No

If yes, please describe the impact and migration path for existing applications:

The PR fulfills these requirements:

If adding a new feature, the PR's description includes:

  • A convincing reason for adding this feature (to avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it)

Other information:

@ysj16
Copy link
Contributor Author

ysj16 commented Nov 20, 2018

In lifecycle.js lines316 , the method 'callHook', disable dep collection when invoking lifecycle hooks by 'pushTarget()', which means the dep collection will be useless in the lifecycle method. The principle of this is that when pushTarget(), the params--watcher is 'undefined', so in the lifecycle method--mounted, Dep.target is 'undefined', which means will not run dep collection.
But I've found a BUG in this method, when invoking computed in mounted,it will pushTarget a lazyWatcher and then popTarget, during the process, it will lose pre Dep.target, which should be 'undefined' and make it to be the renderWatcher, so will run dep collection and collect the child component‘s property by renderWatcher.

Copy link

@jacekkarczmarczyk jacekkarczmarczyk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't it be !=?

Copy link
Member

@posva posva left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you add a test that was failing before adding this check?

@ysj16
Copy link
Contributor Author

ysj16 commented Nov 21, 2018

@jacekkarczmarczyk distinguish undefined from null, Dep.target would be undefined in lifecycle.js line316

@ysj16
Copy link
Contributor Author

ysj16 commented Nov 21, 2018

@posva I've pushed a test

@yyx990803 yyx990803 merged commit 0d62bb8 into vuejs:dev Dec 1, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants