Chat-React
Компонент сеанса чата на основе ReactАдрес GitHub
chat-react
демо
chat-react
инструкции
npm install chat-react
import Chat from 'chat-react';
export default class MyChat extends Component {
state = {
inputValue: '',
messages: [],
timestamp: new Date().getTime()
}
setInputfoucs = () => {
this.chat.refs.input.inputFocus(); //set input foucus
}
setScrollTop = () => {
this.chat.refs.message.setScrollTop(1200); //set scrollTop position
}
sendMessage = (v) => {
const {value} = v;
if (!value) return;
const {messages = []} = this.state;
messages.push(v);
this.setState({messages, timestamp: new Date().getTime(), inputValue: ''});
}
render() {
const {inputValue, messages, timestamp} = this.state;
const userInfo = {
avatar: "http://img.binlive.cn/6.png",
userId: "59e454ea53107d66ceb0a598",
name: 'ricky'
};
return (
<Chat
ref={el => this.chat = el}
className="my-chat-box"
dataSource={messages}
userInfo={userInfo}
value={inputValue}
sendMessage={this.sendMessage}
timestamp={timestamp}
placeholder="请输入"
messageListStyle={{width: '100%', height: window.outerHeight}}
/>
);
}
}
API
Свойства и методы
Типы
описывать
userInfo
object
текущая информация о пользователе
value
string
содержимое поля ввода
placeholder
string
заполнитель для поля ввода
emoji
any
Определить содержание эмодзи
customEmoticon
array
пользовательские смайлики
textareaChange
(value) => {}
Функция обратного вызова, срабатывающая при изменении содержимого поля ввода, первым параметром функции является текущее входное значение.
selectEmoje
(emojeInfo) => {}
Функция обратного вызова после выбора смайлика, первым параметром функции является выбранная информация о содержимом смайлика.
inputFocus
func
Встроенный метод ввода дочернего компонента для установки фокуса вводаthis.chat.refs.input.inputFocus()
dataSource
array
Содержание данных списка сообщений
messageListStyle
object
Стиль списка сообщений, вам нужно установить фиксированную высоту для списка
timestamp
number
Отметка времени, устанавливаемая при изменении источника данных
timeBetween
number
Показывать временные подсказки через указанный интервал времени (единица измерения: минуты, по умолчанию: 5)
timeagoMax
number
Сколько времени до отображения в указанном диапазоне времени (единица измерения: часы, по умолчанию: 24)
timeFormat
string
Пользовательский формат времени (гггг-ММ-дд чч:мм)
loading
bool
Загружается ли источник данных
loader
node
пользовательский загрузчик
noData
bool
Нет ли больше данных
noDataEle
node
Показать пользовательский узел элемента, когда больше нет данных
scrollOptions
object
Этот параметр использует параметр полосы прокрутки iscroll.js,Ознакомьтесь с документацией iscroll.js
scrolltoUpper
func
Функция обратного вызова, которая запускается, когда полоса прокрутки прокручивается вверх
onScroll
func
Функция обратного вызова срабатывает при прокрутке полосы прокрутки
avatarClick
(value) => {}
Функция обратного вызова, запускаемая пользователем, нажимающим на аватар, значением параметра является информация о нажатом пользователе.
unreadCountChange
func
Функция обратного вызова при изменении непрочитанного сообщения
setScrollTop
setScrollTop(value)
Встроенный метод сообщения дочернего компонента, используемый для установки положения полосы прокрутки.this.chat.refs.message.setScrollTop(1200)
Описание параметров компонента
userInfo
Вы должны определить для этого параметраuserId а такжеavatar properties, вы также можете добавить некоторые свойства, которые вам нужны.
userInfo = {
avatar: 'http://example/avatar.jpg', //user avatar, required parameters
userId: '5bf7cf25a069a537ffe7c324', //user id, required parameters
name: 'rigcky',
other: 'otherInfo'
}
emoji
Если вы установите параметр emoji наfalse , смайлики не будут отображаться. Если вы хотите добавить больше эмодзи, вы можете установить для этого параметра массив, содержимое которого — это добавленные вами эмодзи.
// add more emoji
emoji = [
{text: 'panda', content: '🐼'},
{text: 'tiger', content: '🐯'},
{text: 'pig', content: '🐷'}
]
customEmoticon
Пользовательский пакет смайликов, параметр представляет собой тип массива
customEmoticon = [
{text: 'smile', url: 'http://example/emoticon.png'},
{text: 'angry', url: 'http://example/emoticon2.png'},
{text: 'weep', url: 'data:image/png;base64,iVBORw0KGgoA...'}
]
dataSource
Источник данных списка сообщений, формат данных следующий:
const customEmoticon = [{
timestamp: 1545925494422,
userInfo: {
avatar: "http://example/2.png",
name: "游客1544365758856",
userId: "1544365758856"
},
value: "hello~"
}, {
timestamp: 1545925534218,
userInfo: {
avatar: "http://example/2.png",
name: "游客1544365758856",
userId: "1544365758856"
},
value: "😀",
error: true //设置消息状态为失败,显示错误状态图标
}]
messageListStyle
Контейнерный стиль списка сообщений, для него необходимо установить фиксированную высоту, чтобы гарантировать, что он не будет растягиваться содержимым, например{width: '100%', height: 500}
timestamp
токdataSource При изменении данных этот параметр должен быть сброшен на текущую метку времени.
timeFormat
Параметры формата времени, такие как показ 2019-2-1 20:20, установлены в гггг-ММ-дд чч:мм.