代码之家  ›  专栏  ›  技术社区  ›  James.Moriarty

React Native-useEffect内的函数集不工作

  •  -1
  • James.Moriarty  · 技术社区  · 4 年前

    因此,我在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重新加载它时才有效。

    0 回复  |  直到 4 年前
    推荐文章