developit / developit/htm

Ampersand escapes in text content handled differently to JSX

Aberta
#76 11 comentários 5 reações 0 responsáveis Ver no GitHub
discussion help wanted
Linguagem predominante
JavaScript
Estrelas
9k
Forks
181
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

## Reproduction

With the following code:

```
import htm from "https://unpkg.com/htm@2.1.1/dist/htm.mjs";
import { h } from "https://unpkg.com/preact@8.4.2/dist/preact.mjs";
const html = htm.bind(h);

console.log(html`

<
`)
```

I get a VNode with `.children = ["<"]` — i.e. what I mean to render as `<` gets rendered as `<` instead.

## Expected results

Testing this in JSX via say , `

<
` gets transformed into `h("div", ["<"]);` as I originally expected.

I haven't poked into how they are doing this… seems like something that ultimately relies on a lookup table.

## Workaround

I am able to escape via string interpolation (e.g. `${'<'}` instead of `<`). Changing the last line in my sample code to:

```
// …

console.log(html`

${'<'}
`)
```

Results in a VNode with `.children = ["<"]` as I need. Is this the recommended style?

Guia de contribuição

Abrir o guia de contribuição

Direção de pesquisa

Comece pelo ponto de entrada de tagged template mostrado na reprodução: htm.bind(h) e o conteúdo de texto dentro do template. Compare como escapes literais de e comercial e strings interpoladas são tokenizados, usando a saída VNode fornecida como referência. Está concluído quando entidades de texto como \u0026lt; produzirem o texto decodificado correspondente, de forma consistente com JSX, sem quebrar a interpolação.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
javascript
Domínio
frontend
Tipo de issue
Bug
Dificuldade
3/5
Tempo estimado
1-2 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
38/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.