Reactjs react native this.setState导致代码停止运行
我有一个websocket连接设置,react native成功连接到。我的代码如下:Reactjs react native this.setState导致代码停止运行,reactjs,react-native,websocket,Reactjs,React Native,Websocket,我有一个websocket连接设置,react native成功连接到。我的代码如下: export default class Settings extends React.PureComponent { constructor() { super() this.state = { questionText: '' } } connect() { console.log('con
export default class Settings extends React.PureComponent {
constructor() {
super()
this.state = {
questionText: ''
}
}
connect() {
console.log('connected');
var socket = new WebSocket('ws://127.0.0.1:8000/users/');
socket.onopen = function open() {
console.log('WebSockets connection created.');
}
socket.onmessage = function message(event) {
var data = JSON.parse(event.data);
var username = encodeURI(data['username']);
var question = encodeURI(data['question']);
console.log('username: ' + username);
console.log('question: ' + question);
this.setState({ questionText: question });
console.log('state: ' + this.state.questionText);
}
}
render() {
return (
<View style={styles.container}>
<Text>{this.state.questionText}</Text>
<Button
title = "Connect"
onPress = {this.connect} />
</View>
);
}
}
const styles = StyleSheet.create({
container: {
backgroundColor: '#EFEFF4',
alignItems: 'center',
justifyContent: 'center',
flex: 1,
},
});
导出默认类设置扩展React.PureComponent{
构造函数(){
超级()
此.state={
问题文本:“”
}
}
连接(){
console.log('connected');
var socket=newwebsocket('ws://127.0.0.1:8000/users/');
socket.onopen=函数打开(){
log('WebSockets连接已创建');
}
socket.onmessage=函数消息(事件){
var data=JSON.parse(event.data);
var username=encodeURI(数据['username']);
var-question=encodeURI(数据['question']);
console.log('用户名:'+用户名);
console.log('问题:'+问题);
this.setState({questionText:question});
console.log('state:'+this.state.questionText);
}
}
render(){
返回(
{this.state.questionText}
);
}
}
const styles=StyleSheet.create({
容器:{
背景颜色:“#EFEFF4”,
对齐项目:“居中”,
为内容辩护:“中心”,
弹性:1,
},
});
当从后端发送消息并按预期将用户名和问题打印到控制台时,将调用on message函数。然而,状态没有改变,我在this.setState({questionText:question})之后放置的任何代码也没有运行代码>
该行似乎导致了一些问题,但是控制台上没有打印错误。我相信一旦状态发生变化,我所呈现的文本组件也会发生变化。尝试将函数转换为箭头函数this.setState
在您设置的上下文中可能未定义。将函数更改为箭头函数可使此
具有词汇范围
...
connect = () => {
console.log('connected');
var socket = new WebSocket('ws://127.0.0.1:8000/users/');
socket.onopen = function open() {
console.log('WebSockets connection created.');
}
socket.onmessage = (event) => {
var data = JSON.parse(event.data);
var username = encodeURI(data['username']);
var question = encodeURI(data['question']);
console.log('username: ' + username);
console.log('question: ' + question);
this.setState({ questionText: question });
console.log('state: ' + this.state.questionText);
}
}
...
如果不想使用箭头函数,还可以使用.bind
确保此
正确
export default class Settings extends React.PureComponent {
constructor() {
super()
this.state = {
questionText: ''
}
this.connect.bind(this);
}
connect() {
console.log('connected');
var socket = new WebSocket('ws://127.0.0.1:8000/users/');
socket.onopen = function open() {
console.log('WebSockets connection created.');
}
socket.onmessage = function message(event) {
var data = JSON.parse(event.data);
var username = encodeURI(data['username']);
var question = encodeURI(data['question']);
console.log('username: ' + username);
console.log('question: ' + question);
this.setState({ questionText: question });
console.log('state: ' + this.state.questionText);
}.bind(this)
}
...