第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

自定義litelement選擇未正確重新呈現

自定義litelement選擇未正確重新呈現

冉冉說 2021-05-04 21:37:23
我使用LitElement創(chuàng)建了一個自定義選擇組件:import { LitElement, html } from 'lit-element';class CustomSelect extends LitElement {    static get properties()  {        return {            options: { type: Array },            selected: { type: String },            onChange: { type: Function }        };    }    constructor() {        super();        this.options = [];    }    render() {        return html`            <select @change="${this.onChange}">                ${this.options.map(option => html`                    <option value="${option.value}" ?selected=${this.selected === option.value}>${option.text}</option>                `)}            </select>        `;    }    createRenderRoot() {        return this;    }}customElements.define('custom-select', CustomSelect);創(chuàng)建元素時options,我將selected和onChange作為屬性傳遞。在第一個渲染中,一切正常。呈現所有選項,并且所選值反映在選擇中。但是,如果我更改了selected它,似乎并不會更新所選的選項。如果我使用dev-tools檢查該元素,則selected屬性設置正確,但是如果我開始查詢該元素的值,它將返回錯誤的值。我嘗試做的一件事是id在呈現選擇之后通過dev-tools向元素添加屬性。如果再更改selectedon上CustomSelect的id屬性,則該屬性將保留在DOM中,這對我說未重新渲染選擇,這是導致問題的原因,以及為什么在第一個渲染上起作用。我試過在select元素上設置valueandselectedIndex屬性,但是它似乎并沒有以任何有意義的方式影響任何東西。我已經登錄了所有地方(從render()和options-map開始),并且所有輸入值都是正確的。
查看完整描述

2 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

我認為,在onChange函數計時沖突上渲染時間和選定的屬性定義。因此,最好先分配一個setTimeout,onChange然后它才能正常工作。在下面的鏈接示例中。刪除時,我setTimeout 也面臨同樣的問題。此外,您無需onChange在屬性中聲明為函數。

演示版

static get properties()  {

   return {

        options: { type: Array },

        selected: { type: String }

    };

}

constructor() {

    super();

    this.options = [{value:1, text:"ben"},{value:2, text:"sen"},{value:3, text:"oo"},{value:4, text:"biz"},{value:5, text:"siz"},{value:6, text:"onlar"}];

    this.selected = 3

}

render() {

    return html`


        <select id="sel" @change="${this.onChange}">

            ${this.options.map(option => html`

                <option value="${option.value}" ?selected=${this.selected === option.value}>${option.text}</option>

            `)}

        </select>

        <button @click="${this.changeSelected}">Random chage selected option</button>

    `;

}


onChange(x){

 setTimeout(()=>{ 

    this.selected = this.shadowRoot.querySelector('#sel').value

    console.log('Selected -->', this.selected );

   },300)

}

changeSelected(){

  this.selected = (this.options[Math.floor(Math.random() * 6)].value)

  console.log(this.selected)


查看完整回答
反對 回復 2021-05-13
  • 2 回答
  • 0 關注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號