美文网首页
全功能 IM 聊天输入框

全功能 IM 聊天输入框

作者: 申_9a33 | 来源:发表于2022-03-07 16:15 被阅读0次

已支持的功能

  • Emoji 表情插入到输入框中显示
  • @成员弹出,以及在输入框高亮提示
  • 多会话,输入框内存缓存
  • 支持图片插入,拖拽到输入框中显示
  • 支持文件插入,拖拽到输入框中显示

地址

-git地址
-演示地址
-issues


安装

npm i @shen9401/react-im-input pinyin-match 
  • @成员支持模糊搜索,依赖pinyin-match

显示效果

image.png

使用

import ImInput from '@shen9401/react-im-input'

function App(){
  const [out,setOut] = useState<EMsgItem[]>([])
  const imInputRef = useRef<IIMRef>(null)
  const memberList = useMemberList()

  function sendMsg(list:EMsgItem[]){
    setOut(list)
  }

  function handleEmojiClick(item:IEmojiItem){
    imInputRef.current?.insertEmoji(item)
  }

  return (
    <div className='example'>

      <div className='example_tools'>
        <Emoji handleEmojiClick={handleEmojiClick}/>
      </div>

      <div className='example_input'>
        <IMInput 
          memberList={memberList as IMemberItem[]} 
          handleSend={sendMsg}  
          onRef={imInputRef}
        />
      </div>

      <div className="example_btn">
          <div
            className="example_btn--inner"
            aria-hidden="true"
            onClick={()=>imInputRef.current?.sendMsg()}
          >
            发送
          </div>
      </div>

      <ul className='example_out'>
        {out.map((item,index)=>
        (<li key={index}>
          {JSON.stringify(item)}
          </li>)
        )}
      </ul>
    </div>
    )
}


1.Emoji 功能

  • 直接调用内部方法 imInputRef.current?.insertEmoji(item);item 满足 { key:string, data:base64 }结构

2.@成员功能

  • props 传入 memberList 满足 [{ id:string,name:string, avatar:string}]结构

3.发送消息

  • props 传入sendMsg,按Enter键,或者调用imInputRef.current?.sendMsg(),会触发sendMsg回调

4.直接操作InnerHTML

  • imInputRef.current?.setInnerHTML 直接覆盖输入框的内容
  • imInputRef.current?.getInnerHTML 获取输入框的原生内容

5.多会话,输入框内容缓存

import {clearCache} from '@shen9401/react-im-input'
  • 切换props上的inputId,会缓存上一次id的输入框内容,从而回到上一次inputId时,内容能还原
  • 清空指定inputId的缓存,clearCache('inputId')
  • 清空所有缓存,clearCache(undefined)

6.输入框显示图片

6.1 拖拽图片进入输入框

  • 直接拖入图片到输入框内部,即可自动展示

6.2外部插入图片到输入框

    const filePayload:IFilePayload = {
      fileRealName: file.name,
      fileSize: file.size,
      type: file.type,
      localPath: (file as any).path, // electron 扩展属性
      file,
    };

    imInputRef.current.insertImg(filePayload)
  • 构造一个FilePayload

  • 调用insertImg方法即可

  • localPath: electron 可以传入的本地图片地址

  • fileUrl:electron 可以传入的网络图片地址

  • file:web 传入的File文件对象


7.输入框显示文件

  • 外面插入,调用 insertFile方法

  • 其他使用与图片的使用方式相似

相关文章

网友评论

      本文标题:全功能 IM 聊天输入框

      本文链接:https://www.haomeiwen.com/subject/fahnrrtx.html