在天才聊天中删除和复制消息
Delete and copy mesage in gifted chat
使用 Dialogflow,我将 onLongPress 设置为 GiftedChat 组件,如下所示:
<GiftedChat
onLongPress={this.onLongPress}
....
....
/>
onLongPress returns 上下文,消息。然后你可以显示一个 ActionSheet 并添加删除和复制的逻辑。
onLongPress(context, message) {
console.log(context, message);
const options = ['copy', 'Delete Message', 'Cancel'];
const cancelButtonIndex = options.length - 1;
context.actionSheet().showActionSheetWithOptions({
options,
cancelButtonIndex
}, (buttonIndex) => {
switch (buttonIndex) {
case 0:
Clipboard.setString(this.props.currentMessage.text); this code not work and brakes my app :(
break;
case 1:
//code to delete
break;
}
});
}
这里我有代码的发送属性:
sendBotResponse(text) {
let msg = {
_id: this.state.messages.length + 1,
text,
//createdAt: new Date(Date.UTC(2019, 5, 11, 17, 20, 0)),
createdAt: new Date(),
user: BOT_USER,
};
this.setState(previousState => ({
messages: GiftedChat.append(previousState.messages, [msg]),
}));
}
handleGoogleResponse(result) {
console.log(result);
let text = result.queryResult.fulfillmentMessages[0].text.text[0];
this.sendBotResponse(text);
}
onSend(messages = []) {
this.setState(previousState => ({
messages: GiftedChat.append(previousState.messages, messages),
}));
let message = messages[0].text;
Dialogflow_V2.requestQuery(
message,
result => this.handleGoogleResponse(result),
error => console.log(error)
);
}
我犯了一个非常愚蠢的错误,它只适用于箭头函数,除非你手动将它绑定到普通函数,所以必须在 onLongPress
中使用箭头函数
请改变调用函数的方式
onLongPress={this.onLongPress}
到
onLongPress={() => { this.onLongPress() }}
改变this.props.currentMessage.text
至 messages.text
创建以下函数:
onDelete(messageIdToDelete) {
this.setState(previousState =>
({ messages: previousState.messages.filter(message => message.id !== messageIdToDelete) }))
}
onLongPress(context, message) {
console.log(context, message);
const options = ['copy','Delete Message', 'Cancel'];
const cancelButtonIndex = options.length - 1;
context.actionSheet().showActionSheetWithOptions({
options,
cancelButtonIndex
}, (buttonIndex) => {
switch (buttonIndex) {
case 0:
Clipboard.setString(message.text);
break;
case 1:
this.onDelete(messageIdToDelete) //pass the function here
break;
}
});
}
使用 Dialogflow,我将 onLongPress 设置为 GiftedChat 组件,如下所示:
<GiftedChat
onLongPress={this.onLongPress}
....
....
/>
onLongPress returns 上下文,消息。然后你可以显示一个 ActionSheet 并添加删除和复制的逻辑。
onLongPress(context, message) {
console.log(context, message);
const options = ['copy', 'Delete Message', 'Cancel'];
const cancelButtonIndex = options.length - 1;
context.actionSheet().showActionSheetWithOptions({
options,
cancelButtonIndex
}, (buttonIndex) => {
switch (buttonIndex) {
case 0:
Clipboard.setString(this.props.currentMessage.text); this code not work and brakes my app :(
break;
case 1:
//code to delete
break;
}
});
}
这里我有代码的发送属性:
sendBotResponse(text) {
let msg = {
_id: this.state.messages.length + 1,
text,
//createdAt: new Date(Date.UTC(2019, 5, 11, 17, 20, 0)),
createdAt: new Date(),
user: BOT_USER,
};
this.setState(previousState => ({
messages: GiftedChat.append(previousState.messages, [msg]),
}));
}
handleGoogleResponse(result) {
console.log(result);
let text = result.queryResult.fulfillmentMessages[0].text.text[0];
this.sendBotResponse(text);
}
onSend(messages = []) {
this.setState(previousState => ({
messages: GiftedChat.append(previousState.messages, messages),
}));
let message = messages[0].text;
Dialogflow_V2.requestQuery(
message,
result => this.handleGoogleResponse(result),
error => console.log(error)
);
}
我犯了一个非常愚蠢的错误,它只适用于箭头函数,除非你手动将它绑定到普通函数,所以必须在 onLongPress
中使用箭头函数请改变调用函数的方式
onLongPress={this.onLongPress} 到 onLongPress={() => { this.onLongPress() }}
改变this.props.currentMessage.text
至 messages.text
创建以下函数:
onDelete(messageIdToDelete) {
this.setState(previousState =>
({ messages: previousState.messages.filter(message => message.id !== messageIdToDelete) }))
}
onLongPress(context, message) {
console.log(context, message);
const options = ['copy','Delete Message', 'Cancel'];
const cancelButtonIndex = options.length - 1;
context.actionSheet().showActionSheetWithOptions({
options,
cancelButtonIndex
}, (buttonIndex) => {
switch (buttonIndex) {
case 0:
Clipboard.setString(message.text);
break;
case 1:
this.onDelete(messageIdToDelete) //pass the function here
break;
}
});
}