我想:(我正在使用堆栈导航器)
- 执行获取(HTTP 发布到 API),
- 评估响应并采取适当的措施(无论是在失败的情况下向用户显示错误消息,还是在成功的情况下通过显示下一个屏幕让他们继续前进)。
我被困在第 2 步,我无法在不避免此错误消息的情况下评估结果并更改屏幕:
警告:在现有状态转换期间无法更新(例如在
render
或其他组件的构造函数内)。渲染方法应该是 props 和 state 的纯函数;构造函数副作用是一种反模式,但可以移至componentWillMount
我最近才开始 React Native,如果这太明显了,抱歉。下面是我的代码:
render() {
const { navigate } = this.props.navigation;
return (
<View style = {styles.container}>
<TextInput
placeholder='Email Address'
onChange={(event) => this.setState({email: event.nativeEvent.text})}
value={this.state.email}
/>
<TouchableHighlight underlayColor={'transparent'} onPress={this._onPressButton.bind(this)}>
<Image source = {submit} style = { styles.error_separator } ></Image>
</TouchableHighlight>
<TouchableHighlight underlayColor={'transparent'} onPress={() => navigate('Login')}>
<Image source = {login} style = { styles.separator } ></Image>
</TouchableHighlight>
<TouchableHighlight underlayColor={'transparent'} onPress={() => navigate('Index')}>
<Ionicons name="ios-arrow-dropleft-circle" size={44} color="white" style={styles.backicon}/>
</TouchableHighlight>
</View>
)
}
_onPressButton () {
this.setState({visible: true});
fetch('the api url', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: this.state.email
})
})
.then(response=>response.json())
.then(response => {
this.setState({visible: false});
if(response.userContinue) {
userDetails.email = this.state.email
/*
******** This is where I want to be changing the screen, I already
tried putting navigate (by passing it as a function parameter) here, but that fails ********
*/
} else {
this.setState({input: {
height: window.height*.07,
width: window.width*.75,
paddingLeft: window.height*.025,
marginTop: window.height*.018,
fontSize: window.height*.025,
borderWidth: 1,
borderColor: '#e74c3c',
borderRadius: 8,
color: '#ffffff',
}, error: response.message });
}
})
}
非常感谢任何帮助,谢谢。
[编辑] 我故意删除了一些代码,因为它与问题无关,如果它看起来很奇怪,请不要介意。