微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我使用 MobX

如何解决当我使用 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 举报,一经查实,本站将立刻删除。