当我使用 MobX

问题描述

我正在尝试发送 xmpp 消息并获取一些数据,这些数据需要在我的前端显示。接收到的数据(字符串)我在 MobX 中推送到数组中,并显示该数组的消息。我的问题是无限请求循环,获取数据后:发送xmpp消息后,我获取数据并可以显示它们,但是在console.log中错误不断添加。看起来像那样

Error message

我的代码

    const username = 'user_login@domain.com';
    const password = 'user_password';
    const room = 'newroom';
    const { client,xml,jid } = window.XMPP;
    const xmpp = client({
        service: //hidden,username: username,password: password,});

    xmpp.start().catch((err) => {
        console.error('start Failed',err);
    });

    xmpp.on('online',(address) => {
        xmpp.send(xml('presence'));
        get_archive()
    });

    xmpp.on('stanza',async (stanza) => {
        if (stanza.is('presence')) return;
        let usersMessages = '';
        if (stanza.is('message')) {
            usersMessages = stanza.children[0];
            console.log(`[${timeMessage} ${senderFirstName} ${senderLastName}]: ${usersMessages}`);
            
            //This is MobX
            ConsoleMessages.sendMessage(`${senderFirstName} ${senderLastName}`,usersMessages);
        }
        if (!stanza.is('message')) return;
    });

    const get_archive = () => {
        let message = xml(
            'iq',{
                type: 'set',to: `${room}@conference.com`,id: 'GetArchive',},xml(
                'query',{ xmlns: 'urn:xmpp:mam:2' },xml('set',{ xmlns: 'http://jabber.org/protocol/rsm' },xml('max',{},50),xml('before')),),);
        xmpp.send(message);
        console.log(message);
    };

    const sendMessage = async (messageString) => {
        //xml for the message to send
        const message = xml(
            'message',{
                type: 'groupchat',from: 'user_login@domain.com',xml('body',messageString),xml('data',{
                xmlns: //hidden
                senderJID: 'user_login@domain.com',senderFirstName: 'FirstName',senderLastName: 'LastName',receiverMessageId: 'user1',mucname: room,}),);

        //call to send message to the xmpp server
        await xmpp.send(message);
    };

稍后我在单击按钮时调用 get_archive()。

我认为问题在于我尝试将结果推送到 MobX 状态,因为当我评论这个字符串时,一切正常,我尝试将 MobX 替换为简单的 React useState 钩子,但结果是一样的

>

如果我尝试在控制台中显示消息(没有设置为与其他消息一起排列),一切都显示良好,并且不会发生无限循环。也许问题是异步的?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)