为什么Svelte父组件变量未随子组件输入更新?双向绑定不生效?
问题原因说明
首先纠正认知误区:Svelte 并没有默认开启跨组件的双向绑定,双向绑定的默认生效范围仅为「当前组件内部的DOM元素与当前组件声明的变量」。
你遇到的现象本质是父子组件属性默认单向传递导致的,对应场景的数据流逻辑如下:
- App.svelte 调用 Form 组件时,仅做了普通的属性向下传递:
<Form name={name} />,没有显式声明双向绑定 - Form.svelte 中通过
export let name接收父级传值后,内部<input bind:value={name} />实现了Form组件内部的input和Form组件自有name变量的双向绑定,所以Form内部的name可以正常变更 - 由于父子组件之间没有显式加
bind:声明,子组件修改自身接收的name属性时,变更默认不会向上同步回App.svelte的name变量,所以父组件的name不会更新。
修复方案
只需要修改App.svelte中调用Form组件的代码,显式声明双向绑定即可:
<!-- 写法1:完整写法 --> <Form bind:name={name} /> <!-- 写法2:父子变量名相同时可以简写 --> <Form bind:name />
内容的提问来源于stack exchange,提问作者Fred Hors
相关产品推荐
相关产品推荐

