Field label bound to a createModel accessor crashes: scheduleExploreIfVisible is not a function

Aperta Adatta ai principianti
#1,345 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
76/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
typescript
Ambito
frontend

Direzione di ricerca

Inizia in Field.init, dove l’issue indica i controlli delle etichette e la gestione proposta di isAccessorChain; esamina gli helper per accessori e selettori per confermarne il comportamento. Riproduci il problema con l’esempio TextField usando createModel e confrontalo con la forma bind funzionante. Il lavoro è concluso quando la catena di accessori viene trattata come testo dell’etichetta e il campo non genera più errori alla prima esplorazione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

<TextField label={m.$page.labels.key} /> with m = createModel<...>() throws TypeError: ins.scheduleExploreIfVisible is not a function from Widget.explore when the field is first explored. label={bind(m.$page.labels.key)} works.

TypeError: ins.scheduleExploreIfVisible is not a function
    at TextField.explore (Widget)
    at TextField.explore (PureContainer)
    at TextField.explore (Field)
    at Instance.explore

Cause: Field.init tests this.label.isComponentType before isSelector(this.label):

if ((this.label as any).isComponentType) labelConfig = this.label;
else if (isSelector(this.label)) labelConfig.text = this.label;
else Object.assign(labelConfig, this.label);

An accessor chain is a Proxy whose every property is a truthy accessor, so it is taken for a component and used as the label widget. isSelector would not catch it either, since config.type is truthy on the proxy.

Suggested fix: in Field.init, check isAccessorChain(this.label) first and set labelConfig.text = this.label. Consider making isSelector return true for accessor chains, so other props typed StringProp | Config behave the same.

Seen on cx 26.7.0.

Lingua principale
TypeScript
Stelle
492
Fork
72
Merge medio
21m
PR unite (30g)
4

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di codaxy/cxjs

Tutte le issue di codaxy/cxjs

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.