2017-11-01 22 views
0

Ich weiß eigentlich wie das geht, aber ich brauche einen anderen Ansatz.
So habe ich die Texteingabe wie:So fokussiere ich die nächste Eingabe (falls vorhanden) beim nächsten Drücken

<TextInput returnKeyType='next' 
      ref={ref => this.someName = ref} 
      onSubmitEditing={(event) => { this.nextFieldName.focus() }}/> 

Trick ist, dass ich nicht will, bestimmte Namen für die nächste Feld verwenden, sondern einfach weiter zu konzentrieren, wenn eine konzentrieren.
Ist das möglich?

Antwort

0

Es ist ein bisschen breit Ihre Frage. Wenn du mehr Details gibst, könnte ich dir helfen, aber jetzt lass mich dir ein Beispiel geben.

Nehmen wir an, Sie haben ein Array von Daten, die Sie mappen und ein Formular erstellen.

const data = [ 
    { 
    type: 'text', 
    value: 'name' 
    }, 
    { 
    type: 'text', 
    value: 'surname' 
    }, 
    { 
    type: 'number', 
    value: 'age' 
    } 
]; 

können nun durchlaufen Daten

data.map((field, index) => { 
    return (
    <TextInput 
     type={field.type} 
     value={this.state[field.value]} 
     ref={(ref) => this.refs[index] = ref} 
     onSubmitEditing={() => this.onSubmitEditing(index)} 
    /> 
); 
}); 

Jetzt, da wir wissen, welches Feld sind wir auf und wenn ein anderes Feld vorhanden ist, oder wir können nicht konzentrieren oder das Formular abzuschicken.

onSubmitEditing = (index) => { 
    if (data.length <= (index + 1)) { 
    this.refs[index + 1].focus(); 
    } else { 
    // no input to move 
    // submit form 
    } 
} 
+0

Ich habe das alles so gemacht. Ich habe einfach einen String wie ref = {ref => this.refs [item.UniqueName] = ref} und den internen onSubmitEditing() - Handler this.refs [] verwendet. Lösungen sollten dies hinzufügen.refs = []; im Konstruktor. – 1110

+0

Haben Sie 'this.refs = {}' im Konstruktor initialisiert? Und können Sie auch versuchen, einen anderen Namen zu verwenden. 'this.refs' funktioniert möglicherweise nicht, weil React auch verwendet. Versuchen Sie etwas wie this.fields = {} 'und dann' (ref) => this.fields [item.UniqueName] = ref' – bennygenel

0

Angenommen, Sie 2 textInputs haben dann, wenn Sie next drücken, das ist, wie die nächste Eingabe fokussiert werden:

<TextInput returnKeyType='next' 
     onSubmitEditing={(event) => { this.someName.focus() }} 
/> 

<TextInput returnKeyType='next' 
     ref={ref => this.someName = ref} 
/> 
+0

Das ist, was ich habe meine Frage ist, wie man es ohne ref. – 1110

+0

@ 1110 ohne ref Sie können nicht, denn ohne zu sagen, native welche Komponente zu konzentrieren, wird es nichts tun. 'ref' liefert eine Referenz auf die Komponente und sagt native reactive, um diese Komponente zu fokussieren. –

Verwandte Themen