Вот эти три состояния, которые у меня есть прямо сейчас. Когда я хочу отредактировать адрес, он сохраняется не сразу. Он показывает отредактированный ввод, когда снова возвращается со страницы драйвера movit на страницу личных данных.
Это страница драйвера movit
Это личные данные
Это страница редактирования
Возможно, возникла проблема с асинхронным хранилищем, которое показывает отредактированный ввод при возврате со страницы драйвера.
**Address.js**
constructor(props) {
super(props)
this.state = {
address: '',
userToken: null
}
}
async componentWillMount() {
try {
let value = await AsyncStorage.getItem('userData')
let userDetails = JSON.parse(value)
console.info('userDetails 2: ', userDetails)
if (userDetails !== null) {
this.setState({
address: userDetails.address,
userToken: userDetails.token
})
}
} catch (error) {
console.info(error)
}
}
saveAddressEdit = (fieldName, fieldValue) => {
AsyncStorage.setItem(fieldName, fieldValue)
let {userToken} = this.state
var formData = new FormData()
formData.append(fieldName, fieldValue)
fetch('MyURL', {
method: 'POST',
headers: {
'X-API-KEY': 'myApiKey',
'Authorization': userToken
},
body: formData
}).then(function (response) {
console.info(response)
let data = JSON.parse(response._bodyText)
Alert.alert(data.message)
})
.catch((error) => {
console.info(error)
})
.done()
}
render() {
const {address} = this.state
return (
<Container>
<Content style = {{marginHorizontal:20}}>
<Item style = {{marginVertical:40}}>
<Input placeholder = " Type your Address:"
onChangeText = {(address) => this.setState({address})}
value = {address}
/>
</Item>
<Button full danger onPress = {()=>this.saveAddressEdit('address', address)} style = {{backgroundColor:'#ff0000'}}>
<Text style = {{color: '#ffffff'}}>Update Address</Text>
</Button>
</Content>
</Container>
);
}
}Это код address.js для редактирования. Решение, которое мне нужно, похоже на то, что я хочу сразу показать отредактированный ввод. Заранее спасибо.





вы не передаете состояние при нажатии на кнопку. Измените вызов функции onPress на
onPress = {()=>this.saveAddressEdit('address', this.state.address)}
также измените значение TextInput
значение = {this.state.address}
и не пытайтесь использовать то же имя, что и константа внутри обратного вызова onTextChange
Итак, ваша последняя функция рендеринга
render() {
return (
<Container>
<Content style = {{marginHorizontal:20}}>
<Item style = {{marginVertical:40}}>
<Input placeholder = " Type your Address:"
onChangeText = {(address) => this.setState({address:address})}
value = {this.state.address}
/>
</Item>
<Button full danger onPress = {()=>this.saveAddressEdit('address', this.state.address)} style = {{backgroundColor:'#ff0000'}}>
<Text style = {{color: '#ffffff'}}>Update Address</Text>
</Button>
</Content>
</Container>
);
}
Вы заменили свой код приведенным выше? Проблема может быть связана с использованием одного и того же имени для переменных.
Я уже деструктурирую метод render () следующим образом: const {address} = this.state