-
-
Notifications
You must be signed in to change notification settings - Fork 4.4k
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
add updating guard to binding callback #5126
Conversation
The test failure here appears to be legitimate. I'm marking this as Draft for now. |
0a76f66
to
a7985a8
Compare
a7985a8
to
0b8cdf8
Compare
Hrm. I'm not thrilled about the per-component byte cost that this adds. I don't have a better suggestion right now. |
What if we rework this a bit so that Actually, if we're doing that, maybe it makes sense to redo the change in #5123 slightly so that the |
a64345f
to
67e9509
Compare
* upstream/master: add updating guard to binding callback (sveltejs#5126) Bump lodash from 4.17.15 to 4.17.19 (sveltejs#5152) Bump lodash from 4.17.15 to 4.17.19 in /site (sveltejs#5155) Fixes sveltejs#5153 (sveltejs#5154)
* master: (67 commits) add updating guard to binding callback (sveltejs#5126) Bump lodash from 4.17.15 to 4.17.19 (sveltejs#5152) Bump lodash from 4.17.15 to 4.17.19 in /site (sveltejs#5155) Fixes sveltejs#5153 (sveltejs#5154) invalidate $$props and $$restProps only when there are changes (sveltejs#5123) site: use https in link in blog (sveltejs#5148) Simplify each block bindings example (sveltejs#5094) fix $$props reactive for slots (sveltejs#5125) site: add FAQ entry for how to document a svelte component (sveltejs#5131) site: remove an obsolete TODO in blog post (sveltejs#5135) Increase timeout for unit build Increase timeout for unit tests -> v3.24.0 spread condition for input element (sveltejs#5004) update changelog fix(5018): compare wholeText instead of data (sveltejs#5028) html anchor in head (sveltejs#5071) error on expression scope store (sveltejs#5079) update changelog preprocess self-closing script and style tags (sveltejs#5082) ...
Fixes #3180
Fixes #5117
binding callback should be called only when changes happen internally.
similar with
<input bind:value>
, the on input only call when typing into the input, but not when programmatically set theinput.value
.a brief description of the bug:
<Component bind:value />
and when we$$invalidate(value)
from outside,component.$set({ value })
which internally calls$$invalidate(value_internal)
$$.bound[value]()
$$invalidate(value)
component.$set({ value })
which internally calls$$invalidate(value_internal)
!safe_not_equal(value, value_internal)
, so the binding callback,$$.bound[value]()
, did not get called.as you can see from the sequence of steps,
$$invalidate(value)
get called twice.Also, it seemed like it will add quite some bytes into the compiled code, should we rename the variable to a shorter name?
or use
1
/0
instead oftrue
/false
?Before submitting the PR, please make sure you do the following
npm run lint
!)Tests
npm test
oryarn test
)