js实现发送消息功能

方法:1.一是函数传值 告诉要不要发送(即按Enter键可以发送消息)

async handleEnter(e,isPaste) {
        let message = this.state.html
        var conversation = this.props.conversation;

        if( !conversation || !message) return

        if(e.ctrlKey && e.charCode === 13){
            e.preventDefault();
            this.setState({
                html: message + '\n'
            })
            return;
        }

        if(e.charCode === 13 || isPaste)
        {
            //修改一直回车发送空白
            let reg = new RegExp('<div><br></div>','g')
            let reg2 = new RegExp('<div></div>','g')
            let removeEnter = message.replace(reg,'')
            removeEnter = removeEnter.replace(/\s/g , '')
            removeEnter = removeEnter.replace(reg2 , '')
            if(removeEnter.trim() === ''){
                return
            }
            // TODO batch
            var batch = conversation.length > 1;

            // You can not send message to yourself
            // await this.props.sendMessage(
            //     new TextMessageContent(message)
            // )
            
            // 如果含有表情 发送前要处理掉[微笑]  解决方案来自光
            var regSendMsg = message.replace(/<[^>]+>/g, function (match) {
                var flag = match.match(/flag\=\"(\[.+\])\"/g)
                return flag[0].replace(/(flag\=\"|\")/g, '')
                // var flag = match.match(/(?<=flag\=\")\[.+\]/g)
                // return flag[0]                
              })

            let textMessageContent = this.handleMention(regSendMsg);

            this.props.sendMessage(textMessageContent);
            this.setState({
                html: ''
            })
            wfc.setConversationDraft(conversation, '');
            e.preventDefault();
        }
    }

JSX部分

 <ContentEditable
                    id="messageInput"
                    ref="input"
                    onPaste={e => this.handlePaste(e,true)}
                    onKeyPress={e => this.handleEnter(e)}
                    placeholder="输入消息"
                    tagName="pre"
                    html={this.state.html} // innerHTML of the editable div
                    disabled={!canisend}       // use true to disable editing
                    onChange={this.contentChange} // handle innerHTML change
                />      

2.是去掉发送前的判断,( if(e.charCode === 13 || isPaste))跟第一种方法一样,只是去掉if的判断条件,即点击发送按钮发送消息

async clickSendMessage(e,isPaste) {
        let message = this.state.html
        var conversation = this.props.conversation;

        if( !conversation || !message) return

        if(e.ctrlKey && e.charCode === 13){
            e.preventDefault();
            this.setState({
                html: message + '\n'
            })
            return;
        }

        if(true)
        {
            //修改一直回车发送空白
            let reg = new RegExp('<div><br></div>','g')
            let reg2 = new RegExp('<div></div>','g')
            let removeEnter = message.replace(reg,'')
            removeEnter = removeEnter.replace(/\s/g , '')
            removeEnter = removeEnter.replace(reg2 , '')
            if(removeEnter.trim() === ''){
                return
            }
            // TODO batch
            var batch = conversation.length > 1;

            // You can not send message to yourself
            // await this.props.sendMessage(
            //     new TextMessageContent(message)
            // )
            
            // 如果含有表情 发送前要处理掉[微笑]  解决方案来自光
            var regSendMsg = message.replace(/<[^>]+>/g, function (match) {
                var flag = match.match(/flag\=\"(\[.+\])\"/g)
                return flag[0].replace(/(flag\=\"|\")/g, '')
                // var flag = match.match(/(?<=flag\=\")\[.+\]/g)
                // return flag[0]                
              })

            let textMessageContent = this.handleMention(regSendMsg);

            this.props.sendMessage(textMessageContent);
            this.setState({
                html: ''
            })
            wfc.setConversationDraft(conversation, '');
            e.preventDefault();
        }      
    }

JSX

 <div 
                    id="sendAMessage"
                    disabled={!canisend}
                    className={classes.send_btn} 
                    onClick = {e => this.clickSendMessage(e)}>发送
                </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值