-
-
Notifications
You must be signed in to change notification settings - Fork 33.7k
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(#8728): only execute the dependArray function once #8734
base: dev
Are you sure you want to change the base?
Conversation
em.. I think the changes in this PR cause a regression bug. It looks like the <template>
<div>
<p>{{ nest[0] }}</p>
<button @click="nest[0].push('next')">add one</button>
</div>
</template>
<script>
export default {
data() {
return {
nest: [
['init'],
],
};
},
}
</script> Have not try this example with your branch yet, but I think the |
The |
my bad, the check was executed before depend so it is ok:) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about
const needDepend = !Dep.target.checkRelated(dep)
if (Dep.target && needDepend ) {
dep.depend()
if (childOb) {
childOb.dep.depend()
if (Array.isArray(value)) {
dependArray(value)
}
Because plain-object will still cause useless redepend.
@wangyi7099 |
@HcySunYang
I think you are right. But I also think care about plain-object will also save some performance cost. |
What kind of change does this PR introduce? (check at least one)
Does this PR introduce a breaking change? (check one)
If yes, please describe the impact and migration path for existing applications:
The PR fulfills these requirements:
dev
branch for v2.x (or to a previous version branch), not themaster
branchfix #xxx[,#xxx]
, where "xxx" is the issue number)If adding a new feature, the PR's description includes:
Other information:
The
newDepIds
property of each Watcher instance object holds all the dependencies collected by this evaluation. We can prevent thedependArray
function from being called multiple times by checking if the dependency has been collected.