首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将lit html中的嵌套三元组转换为if/lit

将lit html中的嵌套三元组转换为if/lit
EN

Stack Overflow用户
提问于 2022-07-11 16:28:05
回答 2查看 82关注 0票数 -1

如何在下面编写lit代码

我对lit很陌生,我尝试将下面的代码转换为if/lit,而不是嵌套的三元代码。

代码语言:javascript
复制
 render() { 
    return this.html`   
     ${this.data ? this.html`<comp data={this.data}></comp>`
                    : data1 && data1.test === 'valid' && valueCheck ? this.html`
                      <comp2 data={this.data2}  ></comp2>
                    `
                    : this.html`
                      <comp1 data={this.data1}  ></comp1>
                    `} `;}

需要转换为简单的,如果其他

EN

回答 2

Stack Overflow用户

发布于 2022-07-11 16:32:03

我知道你想用这个来渲染组件。通常,如果/else需要执行复杂的验证,则在呈现部分之外执行它们,并将其归因于变量。

代码语言:javascript
复制
let dataToRender = undefined;
if(this.data){
    dataToRender = this.html`<comp data={this.data}></comp>`
} else if(data1 && data1.test === 'valid' && valueCheck){
    dataToRender = <comp2 data={this.data2}  ></comp2>
} else {
    dataToRender = <comp1 data={this.data1}  ></comp1>
}

然后,在呈现函数上简单地:

代码语言:javascript
复制
render(
    ${dataToRender}
)
票数 1
EN

Stack Overflow用户

发布于 2022-07-15 07:05:53

您通常希望基于逻辑来枚举值,如果您的逻辑增长,它在将来会更易读和更易于维护。

您还可以结合内置的choose指令,根据键值呈现多个模板中的一个。

代码语言:javascript
复制
import { LitElement, html } from "lit";
import { choose } from "lit/directives/choose.js";

enum RenderOptions {
    COMP,
    COMP_1,
    COMP_2
}

class MyElement extends LitElement {
    // mocks
    data = {}
    data1 = { test: "valid" }
    data2 = {}
    valueCheck = true

    render() {
        return html`
            ${choose(this._conditionalRender(), [
                [RenderOptions.COMP, () => html`<comp data={this.data}></comp>`],
                [RenderOptions.COMP_1, () => html`<comp1 data={this.data1}></comp1>`]
                [RenderOptions.COMP_2, () => html`<comp2 data={this.data2}></comp2>`],
            ],
            () => html`<h1>Error</h1>`)}
        `;
    }

    private _conditionalRender(): RenderOptions {
        if (this.data) {
            return RenderOptions.COMP
        }
        if (this.data1 && this.data1.test === 'valid' && this.valueCheck) {
            return RenderOptions.COMP_2
        }
        return RenderOptions.COMP_1
    }
  }


// implementations of...
// comp
// comp1
// comp2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72941744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档