Also verwende ich einen Hash, um die Werte der dynamisch erstellten Reihen von Eingabewerten zu speichern, und ich verliere den Fokus auf die Eingabe, die ich nach Eingabe nur eines Zeichens modifiziere. Ich denke, die Lösung dafür könnte sein, Refs zu verwenden, um sich nur auf die zuletzt geänderte Eingabe zu konzentrieren, aber ich konnte es nicht zum Laufen bringen, da ich nicht herausfinden konnte, welches Element zuletzt geändert wurde. Ratschläge, wie dies zu lösen ist, werden geschätzt.reactjs Eingabeelement verliert Fokus nach Tastendruck
Der folgende Code erstellt dynamisch Eingabefelder und sucht ihre Werte basierend auf dem UnitPriceValueHash. Jede Variante hat eine ID, und ID wird als Schlüssel für den Hash verwendet.
Ich habe einen Codepen erstellt, um zu versuchen und das Problem neu zu erstellen, aber das Problem im Gesicht zeigt sich nicht in Code-Stift. In meiner aktuellen App drücke ich zB 1 in das Eingabefeld, dann steht der Cursor nicht mehr auf dem Eingabefeld.
https://codepen.io/ByteSize/pen/oogLpE?editors=1011
Der einzige Unterschied zwischen dem codepen und meinem Code erscheint in einer Tabelle die Tatsache, die die Eingänge verschachtelt zu sein.
CreateItem(variant) {
const unitPriceValueHash = this.props.unitPriceValueHash
return {
variant_title: variant.variant_title,
variant_price: variant.variant_price,
unit_cost: <TextField
type="number"
onChange={(event) => this.handleUnitPriceChange(variant.id, event)}
key={variant.id}
value={unitPriceValueHash[variant.id] || ''}
/>
};
}
Unten ist die Zustandsänderung, die den Hash-
handleUnitPriceChange (id, event) {
const unitPriceValueHash = this.state.unitPriceValueHash
unitPriceValueHash[id] = event
console.log(unitPriceValueHash)
this.setState({unitPriceValueHash: unitPriceValueHash});
//this.updateVariantUnitCost(id, event);
}
Verwenden Sie nicht '.bind (this)' inline in den Requisiten - es leidet unter dem gleichen Problem, das ich in meiner Antwort erwähnte (es erstellt eine neue Funktion bei jedem Render). Besser, das im Konstruktor zu tun. – caesay