Cordova アプリでチャット機能を実装するときに便利な React コンポーネントを見つけたので、備忘録としてまとめ。
タイトルにもある通り、「react-chat-elements」というコンポーネントです。
CSS を使えば、自前で実装することもできるのですが、既にコンポーネントがあるなら使おう!と思って触ってみました。
GitHub のページがこちら。
GitHub – Detaysoft/react-chat-elements: Reactjs chat elements chat UI, react chat components
https://github.com/Detaysoft/react-chat-elements
まず、下記のコマンドでライブラリをインストールします。
npm install react-chat-elements --save
インストールが完了したら、お好みのコンポーネントを使って実装するだけです。
私は、MessageList を使用しました。
チャットのデータを配列で一気に渡せるのが決め手でした。
サンプルコードは下記のとおりです。
import { MessageList } from 'react-chat-elements';
import 'react-chat-elements/dist/main.css';
const messages = [
{
position: 'left',
type: 'text',
text: 'サンプルチャット',
date: new Date('2020-03-12 13:00:00'),
},
{
position: 'right',
type: 'text',
text: 'サンプルチャット2',
date: new Date('2020-03-12 14:00:00'),
},
{
position: 'left',
type: 'photo',
data: {
uri: 'img/human.svg',
status: {
click: false,
loading: 0,
}
},
date: new Date('2020-03-12 15:00:00'),
}
];
class ChatPage extends Component {
constructor(props) {
super(props);
this.state = {
}
}
render() {
return (
<MessageList
toBottomHeight={'100%'}
lockable={true}
dataSource={messages} />
);
}
}
export default ChatPage;
変数 messages に、サンプルのチャットデータを格納したので、こちらを 42行目の dataSource に渡しています。
messages に格納されている内容によって、吹き出しの位置を自動で変更してくれたり(position)、表示するデータ形式を メッセージや写真に変更してくれる(type)のも便利です。
CSS を使って自分で実装すると、このあたりが面倒だったりしますしね。
ただ、date に格納されている日付が英語表記になってしまっているので、こちらは今後修正したいと考えています。
実装としては以上です。
以上、React でチャット UI を簡単に実装できるコンポーネント「react-chat-elements」のご紹介でした。
ご参考になれば幸いです。