Ich bin völlig verloren, wie man zwei Parameter von einem Formular-Bildschirm und übergeben sie über React Navigator und zeigen sie auf dem vorherigen Bildschirm.Pass TextInput Requisiten zwischen verschiedenen Bildschirmen in React Navigation
Der betreffende App-Abschnitt funktioniert so:
1. touchablehighlight Bildschirm zu bilden.
2. Eingabe Titel und Beschreibung und drücken Sie Senden onpress
3. Der onpress führt eine Funktion, die die Parameter auf die vorherige Seite über einen Schlüssel sendet.
4. kehrt dann mit den Requisiten auf dem Display zur Ausgangsseite zurück.
ich mehrere Probleme mit dem Prozess habe:
1. wenn ich die Dokumentation am Verständnis richtig, jede Seite hat einen eindeutigen Schlüssel und ich versuchte es über this.props.navigation.state.key zu finden, aber unbekannt zu mir, beim Aktualisieren würde sich die ID-Nummer ändern.
2. Dies führt zu Problem 2, wo die Funktion ausgeführt wird, aber es wird nicht auf die ursprüngliche Seite umgeleitet.
3. Ich habe versucht, .navigate Zeile nach .dispatch, aber es würde eine neue Kopie der ursprünglichen Seite öffnen und nicht die neuen Requisiten anzeigen, die vermutlich weitergegeben wurden.
import React from 'react';
import styles from '../styling/style.js';
import { Text, View, Image, TouchableHighlight, TextInput, Alert } from 'react-native';
import { StackNavigator, NavigationActions } from 'react-navigation';
import Forms from './formGenerator';
export default class Workout extends React.Component {
constructor(props) {
super(props);
this.state = {
programTitle: '',
programDescription: ''
}
}
render() {
const {navigate} = this.props.navigation;
return (
<Image style={styles.workoutContainer, { flex: 1}} source={require("../images/HomepageBackground.jpg")}>
<View style={styles.workoutBody}>
<Text style={styles.workoutTextBody}> {this.state.programTitle}</Text>
<Text style={styles.workoutTextBody}>{this.state.programDescription}</Text>
</View>
<View style={styles.createButton}>
<TouchableHighlight onPress={Alert.alert(this.props.navigation.state.key)} style={styles.addButtonTouch} title='test' >
\t <Text style={styles.addButtonText}>+</Text>
</TouchableHighlight>
</View>
</Image>
);
}
// End of the render
}
import React from 'react';
import styles from '../styling/style.js';
import { Text, View, Image, TouchableHighlight, TextInput, Button, Alert } from 'react-native';
import Workout from './workouts';
import { NavigationActions } from 'react-navigation';
export default class Forms extends React.Component {
constructor(props) {
super(props);
this.state = {
programTitle: '',
programDescription: ''
}
}
render() {
const {goBack} = this.props.navigation;
const {params} = this.props.navigation.state;
return (
<Image style={styles.workoutContainer, { flex: 1}} source={require("../images/HomepageBackground.jpg")}>
<View style={styles.workoutBody}>
<Text style={styles.formHeader}>Program Title</Text>
<TextInput
autoFocus={true}
style={styles.formBody}
onChangeText={(programTitle) => this.setState({programTitle})}
placeholder='Title'
value={this.state.programTitle} />
<Text style={styles.formHeader}>Description (Ex. 4sets x 10reps)</Text>
<TextInput
autoFocus={true}
style={styles.formBody}
placeholder='Description'
onChangeText={(programDescription) => this.setState({programDescription})}
value={this.state.programDescription} />
<TouchableHighlight onPress={this.addProgram} style={styles.buttonBody} title="Add Program" >
<Text>Add Program</Text>
</TouchableHighlight>
</View>
</Image>
);
}
addProgram =() => {
Alert.alert(this.props.navigation.state.key);
this.setState({programTitle: ''});
this.setState({programDescription: ''});
const setParamsAction = NavigationActions.setParams({
params: { programTitle: this.state.programTitle, programDescription: this.state.programDescription },
key: ,
})
this.props.navigation.dispatch(setParamsAction)
};
}
Entschuldigung, bekomme ich Sie nicht .. welche beziehen Sie sich auf den aktuellen Bildschirm und vorherigen Bildschirm? –
@JefreeSujit Entschuldigung, es wäre wie diese erste Seite (onpress)> formpage (onpress)> zurück zur ursprünglichen ersten Seite mit aktualisierten Zuständen – RandomC
Ich würde vorschlagen, dass Sie Callbacks anstelle von Seitenschlüssel verwenden.Übergeben Sie einen Callback als Props an formpage und onSubmit return false und übergeben Sie die Werte an den übergeordneten Callback, und lassen Sie den Wert vom übergeordneten Element übergeben. Auf diese Weise kann die erste Seite die Werte beibehalten. –