1.5.5 • Published 4 years ago

@efox/message-middleware v1.5.5

Weekly downloads
-
License
MIT
Repository
-
Last release
4 years ago

初始化

  • yarn
yarn add @efox/message-middleware
  • npm
npm install @efox/message-middleware

API总览

  • customHooks
  • MessageList
  • MobileInput

customHooks

1. useCollectMessage

存储接收的消息并以节流的方式响应至组件

参数
  • 类型: Object
  • 内容
名称解释类型默认值单位是否必填
maxCount存储的最大容量,超过会清除之前的数据number50N
singleThreshold单条消息响应至组件的延迟时间number200msN
maxThreshold最大必须响应至组件的延迟时间number600msN
返回值
  • 类型: Object
  • 内容
名称解释类型
messageList响应式数据结构any[]
clearMessageList清除消息列表的句柄Function
refresh刷新消息列表的句柄Function
pushInToMessageList添加消息的句柄(param: T|T[]) => void
toggleRefusPush开启/取消拒收消息功能Function
使用方式
declare type messageT = {message: string}
const { messageList, clearMessageList, refresh, pushInToMessageList, toggleRefusPush } = useCollectMessage<messageT>()
使用示例
// MyComponent.tsx

import { useCollectMessage } from '@efox/message-middleware'
  declare type messageT = {message: string}
  const MyComponent = () => {
    const {
      messageList,
      clearMessageList,
      refresh,
      pushInToMessageList,
      toggleRefusPush
    } = useCollectMessage<messageT>({
       maxCount: 100,
       singleThreshold: 150
    })
    pushInToMessageList({message: 'test'})
    clearMessageList()
    refresh()
    return <span>{messageList.map(({message}) => message)}</span>
  }

2. useBeforeFirstRender

只在第一次渲染前执行的hook

参数
  • 类型:
    () => (() => void | void)
返回值: void
使用方式
useBeforeFirstRender(() => {
  // do something here
})
使用示例
// MyComponent.tsx

import { useBeforeFirstRender } from '@efox/message-middleware'
  useBeforeFirstRender(() => {
    const num = setInterval(() => {
      console.log('do sth u want before render')
    }, 1000)
    // be called after the component destroyed
    return () => clearInterval(num)
  })

MessageList

消息展示组件

props

名称解释类型默认值是否必填
list消息列表any[]-Y
renderProps渲染单行内容的函数(messageObj: any, otherProps: any) => JSX.Element or string-Y
otherProps会传入渲染函数的额外属性any{}N
listStyle整个列表的外层样式React.CSSProperties{}N
singleRowStyle列表内容单行外层样式React.CSSProperties{}N
needClearCache是否需要清除缓存,若无大小变化,则不需要考虑设置该参数booleanfalseN
onScroll列表滚动的回调(param: ScrollParams) => voidfunction() {}N
scrollToAlignment滚动对齐方式auto | end | start | centerautoN

方法

  • scrollToRow 跳转至某一行,接收一个index参数,示例:

    // MyComponent.tsx
    
    import type { listRefT } from '@efox/message-middleware'
    
    const MyComponent = () => {
      const listRef = useRef<listRefT>(null)
      listRef.current?.scrollToRow(0)
      return <MessageList ref={listRef} />
    }

使用示例

// MyComponent.tsx

import { MessageList } from '@efox/message-middleware'

// declare message type
declare type messageT = { message: string, style?: React.CSSProperties }

// define message list
const list: messageT[] = [
  {message: 'welcome to use @efox/message-middleware'},
  {message: "hello YY"}
]

// define other properties
const otherProps = {
  onClick: () => console.log('I love YY')
}

const MessageRender = (messageObj: messageT, otherProps) => {
  if (messageObj.style) {
      // return JSX.Element
      return <span style={messageObj.style} onClick={otherProps.onClick}>{messageObj.message}</span>
  }
  // return string
  return messageObj.message
}

const MyCompnent = () => {
  return <MessageList
            list={list}
            otherProps={otherProps}
            renderProps={MessageRender}
            listStyle={{ paddingRight: '50px' }}
            singleRowStyle={{ textAlign: 'left', padding: '0 5px' }}
          />
}

export default MyCompnent

MobileInput

可插入表情的移动端组件

props

名称解释类型默认值是否必填
emojiList表情列表, 若设置了name,在onChange及onSend事件中返回的则是name的内容,反之则返回src{name?: string, src: string}[][]N
emojiContainerHeight表情容器高度,若表情分页,则该属性无效number135N
paginationInfo分页信息,若需要分页,则设置该属性即可{rowCount: number, columnCount: number}-N
onChange输入内容变化时回调的方法(text: string) => void() => {}N
onSend点击发送按钮后的回调(text: string) => void() => {}N
placeHolder输入框空白时显示的内容string''N
smileBtn自定义表情按钮组件(替换时无需在组件上另外实现点击事件)ReactElement-N
extraBtn额外的自定义按钮组件(点击事件需额外实现)ReactElement-N
sendBtn自定义发送按钮组件(替换时无需在组件上另外实现点击事件)ReactElement_N

使用示例

// MyComponent.tsx

import { MobileInput } from '@efox/message-middleware'
import {ReactComponent as Phone} from 'my/dir/phone.svg'
// MobileInput's style
import '@efox/message-middleware/lib/index.css'
const paginationInfo = {
  rowCount: 3,
  columnCount: 6,
}
const MyCompnent = () => {
  return <MobileInput
          paginationInfo={paginationInfo}
          extraBtn={<Phone onClick={() => alert('phone')} width={30} height={30} fill="#D0D2DA" />}
          placeHolder="参与互动..."
          onSend={text => {
            console.log(text)
          }}
        />
}

export default MyCompnent
1.5.5

4 years ago

1.5.4

4 years ago

1.5.3

4 years ago

1.5.2

4 years ago

1.5.1

4 years ago

1.5.0

4 years ago

1.4.9

4 years ago

1.4.8

4 years ago

1.4.7

4 years ago

1.4.6

4 years ago

1.4.5

4 years ago

1.4.4

4 years ago

1.4.3

4 years ago

1.4.2

4 years ago

1.4.1

4 years ago

1.4.0

4 years ago

1.3.4

4 years ago

1.3.3

4 years ago

1.3.2

4 years ago

1.3.1

4 years ago

1.3.0

4 years ago

1.2.9

4 years ago

1.2.8

4 years ago

1.2.7

4 years ago

1.2.6

4 years ago

1.2.5

4 years ago

1.2.4

4 years ago

1.2.3

4 years ago

1.2.2

4 years ago

1.2.1

4 years ago

1.2.0

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.2

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago