Почему я не могу вызвать метод в subscribe — не удается прочитать свойство ‘showMessageFromSocket’ неопределенного

#javascript #reactjs

#javascript #reactjs

Вопрос:

Я хочу вызвать метод в блоке подписки, но я получил «Не удается прочитать свойство’showMessageFromSocket’ неопределенного». Как я могу вызвать метод showMessageFromSocket? В angular это было возможно.

 export default class ConnectedChatroom extends Component<
  ConnectedChatroomProps,
  ConnectedChatroomState
> {
  wsObj: CompatClient;

  constructor(props: Props, context: *) {
    super(props, context);
    this.configureSocketChannel('dassfa')
  }

  showMessageFromSocket(message)  {
    console.log(message);
    //do something
  }

  configureSocketChannel(senderId: string) {
    let ws = Stomp.client("ws://localhost:8080/chat");
    ws.connect({}, function (frame) {
      ws.subscribe("/topic/messages", function (message) {
        this.showMessageFromSocket(message);
      });
    }, function (error) {
      console.log("STOMP error "   error);
    });
    this.wsObj = ws;
  }
 

Ответ №1:

Используйте arrow функцию для доступа к членам класса, таким как переменная или метод класса, без собственной переменной.

Попробуйте, как показано ниже

 configureSocketChannel(senderId: string) {
    let ws = Stomp.client("ws://localhost:8080/chat");
    ws.connect({},  (frame) => {
      ws.subscribe("/topic/messages",  (message) => {
        this.showMessageFromSocket(message);
      });
    }, function (error) {
      console.log("STOMP error "   error);
    });
    this.wsObj = ws;
}