提问人:dman 提问时间:10/23/2023 最后编辑:dman 更新时间:10/24/2023 访问量:46
为什么输入元素保留该值?第二次不应用数据绑定
Why is input element retaining the value? Data binding is not applying the second time
问:
使用点亮元素...我有这个元素称为单个事务。在交易列表页面中,我单击单个交易并转到包含单个交易的新页面。
在 notes 输入元素中:
- 我编辑输入并将“foo”更改为“bar”
- 我不保存
- 我回到主页。
- 然后,我回到同一个单一事务。
备注输入具有已编辑的值。它应该有,因为我没有保存值。为什么这个值会持续存在?似乎当我返回单事务元素时,数据绑定会显示原始值。这就像数据绑定逻辑没有再次运行并更新元素一样。bar
foo
bar
.singleTransData=${this.singleTransData}
foo
parent 元素
<single-transaction
data-el="add-catergory"
.singleTransData=${this.singleTransData}
id="single-transaction"></single-transaction>
单交易元素:
static properties = {
singleTransData: {
type: Object,
},
label: {
type: String,
},
};
constructor() {
super();
this.singleTransData = {};
}
render() {
return html`
<mwc-icon-button
@click=${this.#leavePage}
icon="arrow_back"></mwc-icon-button>
<span class="row">
<md-outlined-text-field
label="notes"
data-key="notes"
value="${this.singleTransData.notes}"
></md-outlined-text-field>
</span>
`
}
答:
如果你在进入主页时保留包含 connected 的 DOM,比如说,要么只用 CSS 显示当前页面,要么使用指令,那么输入、它的当前值和与它的绑定都会被保留。<single-transaction>
cache()
点亮的绑定会记住它们以前的值,并且仅在数据更改时更新 DOM。这意味着,对于更改其内部状态的元素,当您使用与之前渲染值相同的值重新渲染时,Lit 不会重置它。
也就是说,如果你用 Lit 和 value 渲染,在内部将值更改为 ,然后用 Lit 和 value 重新渲染,Lit 不会设置属性,因为它知道值是静止的,不需要更改。"foo"
"bar"
"foo"
"foo"
这只发生在修改自身内部状态的元素(在 React-land 中有时称为“不受控制的组件”)上。为了解决这个问题,Lit 有指令:https://lit.dev/docs/templates/directives/#livelive()
live()
绕过 Lit 的内部绑定值存储,并始终根据绑定到的属性的实时值进行检查。
<md-outlined-text-field>
already 用于绑定到它的内部,并在事件上更新它的属性,因此它的属性始终是最新的。您应该能够添加到模板中以实现相同的效果:live()
<input>
value
input
value
live()
<md-outlined-text-field
label="notes"
data-key="notes"
value="${live(this.singleTransData.notes)}"
></md-outlined-text-field>
评论
.value
评论