因此,我在useEffect中为两个uid设置了sendMessage函数:
初始化:
const [sendMessage, setSendMessage] = useState(() => () => {console.log("original")});
var sb;
const sendbirdConnect = () => {
/*setMessages([
{
user: {
_id: uid,
},
},
]);*/
sb = new SendBird({appId: "96483917-912B-47EE-9727-1C0D1EC38447", localCacheEnabled: false }); // The `localCacheEnabled` is optional.
sb.connect(uid, function(user, error) {
if (error) {
// Handle error.
console.log(error)
}
else
{
console.log("connected!")
}
// The user is connected to Sendbird server.
});
sb.GroupChannel.createChannelWithUserIds([uid,"Harry"], true, uid, null, null, function(groupChannel, error) {
if (error) {
// Handle error.
console.log(error);
}
else
{
console.log("channel created!");
console.log(groupChannel.url);
console.log(groupChannel);
}
// A group channel of the specified users is successfully created.
// Through the "groupChannel" parameter of the callback function,
// you can get the group channel's data from the result object that Sendbird
getMessages(groupChannel);
setSendMessage((params) => (params) => {
groupChannel.sendUserMessage(params, function(message, error) {
if (error) {
// Handle error.
console.log(error);
}
else
{
console.log("message sent!")
}
// The message is successfully sent to the channel.
// The current user can receive messages from other users through the onMessageReceived() method of an event handler.
});
});
});
}
useEffect(() => {
getUId();
//sendbirdConnect();
},[]);
useEffect(() => {
sendbirdConnect();
}, [uid]);
带GiftedChat的Onsend功能:
const onSend = useCallback((messages = []) => {
const params = new sb.UserMessageParams();
params.message = messages[0].text;
let message = messages[0]
let data = {
"_id": message["_id"],
"createdAt": message.createdAt,
"user": {"_id": message.user["_id"]}
}
data = JSON.stringify(data);
params.data = data;
//const sendMessageNow = () => { sendMessage(params) }
//sendMessageNow();
sendMessage(params);
setMessages(previousMessages => GiftedChat.append(previousMessages, messages));
}, []);
现在其他一切都正常了,用户与sendbird连接,并加载了以前的消息(getMessages),但sendMessage只有在我保存文件并metro重新加载它时才有效。