Исходя из того, что вы сказали, экран A не отключается и, даже если значение в this.state.text
остается нетронутым, графически значение было очищено. В моем случае все работает как положено.
ScreenA
import React, { Component } from "react";
import { TextInput } from "react-native-paper";
export default class ScreenA extends Component {
constructor(props) {
super(props);
this.state = { text: "" };
}
render() {
return (
<TextInput
error={false}
label="Enter something"
mode="outlined"
onChangeText={text => this.setState({ text })}
onBlur={() => this.props.navigation.navigate("ScreenB")}
value={this.state.text}
/>
);
}
}
ScreenB
import React, { Component } from "react";
import { Text, View } from "react-native";
export default class LoadingScreen extends Component {
render() {
return (
<View>
<Text> ScreenB </Text>
</View>
);
}
}
Navigator
const RoutesConfig = {
ScreenA: {
screen: ScreenA,
},
ScreenB: {
screen: ScreenB,
}
};
const StackNavigatorConfigs = {
initialRouteName: "ScreenA",
};
export default createStackNavigator(RoutesConfig, StackNavigatorConfigs);
В режиме ScreenA
я пишу все, что мне нужно, а затем перехожу к ScreenB, когда TextInput
вызывает onBlur
. Используя StackNavigator Header
, я возвращаюсь назад, и значение все еще сохраняется и отображается в TextInput
.
Если значение все еще сохраняется в state
(если я правильно понял, что это так) Вы можете использовать withNavigationFocus
HO C, предоставленный react.navigation
. Используя это, вы можете увидеть, действительно ли значение сохранено, и посмотреть, будет ли при повторном рендеринге отображаться значение графически.
Например, используя мой ScreenA
sample:
import React, { Component } from "react";
import { TextInput } from "react-native-paper";
import { withNavigationFocus } from "react-navigation";
class ScreenA extends Component {
constructor(props) {
super(props);
this.state = { text: "" };
}
componentDidUpdate = (prevProps) => {
if ( prevProps.isFocused === false && this.props.isFocused === true ){
this.setState({ text : this.state.text })
}
}
render() {
return (
<TextInput
error={false}
label="Enter something"
mode="outlined"
onChangeText={text => this.setState({ text })}
onBlur={() => this.props.navigation.navigate("ScreenB")}
value={this.state.text}
/>
);
}
}
export default withNavigationFocus(ScreenA);