一旦用户输入姓名和电话号码,我就会尝试将用户信息发送到服务器。当用户输入他们的信息时,我可以获得正确的信息。但是,当我第一次运行该应用程序时,我得到的是this.state.name
和this.state.phone
的空数据,而不是空字符串。
下面是我的代码:
constructor(){
super()
this.clearData = this.clearData.bind(this)
this.persistData = this.persistData.bind(this)
this.state = {
name: '',
phone: ''
}
}
submit(){
let collection = {}
collection.name = this.state.name,
collection.email = this.state.phone,
console.warn(collection)
var url = 'http://localhost:3000/users';
fetch(url, {
method: 'POST', // or 'PUT'
body: JSON.stringify(collection), // data can be `string` or {object}!
headers: {
'Content-Type': 'application/json'
}
}).then(res => res.json())
.then(response => console.log('Success:', JSON.stringify(response)))
.catch(error => console.error('Error:', error));
}
persistData(){
let name = this.state.name
let phone = this.state.phone
AsyncStorage.setItem('name', name)
AsyncStorage.setItem('phone', phone)
this.setState({ name: name, persistedName: name, phone: phone, persistedPhone: phone })
}
check(){
AsyncStorage.getItem('name').then((name) => {
this.setState({ name: name, persistedName: name })
})
AsyncStorage.getItem('phone').then((phone) => {
this.setState({ phone: phone, persistedPhone: phone })
})
}
componentWillMount(){
this.check()
}
render() {
////Here I am getting null!
console.log(this.state.name)
console.log(this.state.phone)
return ()
< View >
<TouchableOpacity
onPress={() => { this.persistData(); this.submit(); }}>
<Text> submit button </Text>
</TouchableOpacity>
</View >
}
我想在初次运行应用程序时获取this.state.name
和this.state.phone
的空字符串。有没有办法做到这一点?
答案 0 :(得分:1)
AsyncStorage
返回null
作为值(如果尚未设置)。因此,根据您的情况,当您首次运行该应用程序并调用this.check()
时,返回的值为null
。您的回调将覆盖默认状态。按提交后,便已设置好,因此下次运行该应用程序时便已设置好。
您需要在AsyncStorage
回调中设置默认值:
this.setState({name: name || '', persistedName: name || ''})
如果!=
为null且未定义,则设置名称,否则设置为空字符串。