En mi aplicación React, necesito devolver algunos datos y funciones desde un gancho personalizado. Los datos de enlace solo deben devolverse si una condición es válida.
El gancho personalizado se usa así:
const { conversation, currentMember, handleAddMessage, handleResolveConversation, } = useConversation(consentee);La idea es que en pseudocódigo:
if (valid_condition) // give back the things from the hook const { conversation, => DATA currentMember, => DATA handleAddMessage, => FUNCTION handleResolveConversation, => FUNCTION } = useConversation(consented); else give back the CONSENTEE and the rest should be NULLEl problema es que necesito llamar a este enlace si se cumple la condición válida y no estoy seguro de cómo hacerlo y devolver lo que necesito usar.
El segundo problema es para la conversation y currentMemebr , que no necesitan devolver nada para no activar otras cosas relacionadas, pero tengo ese parámetro de consentee que necesito devolver solo como datos si no se llama al gancho.
Por favor, pregunte en los comentarios si confunde demasiado mi pregunta :)
Como referencia, estoy agregando el gancho personalizado.
const useConversation = consentee => { const { user } = useAuth(); const { joinConversation, joinedConversation } = useJoinConversation(); const resolveConversation = useResolveConversation(); const addMessage = useAddMessage(); const conversation = useGetConversation(joinedConversation?.conversation?.id); const currentMember = useMemo(() => joinedConversation?.member, [ joinedConversation, ]); useEffect(() => { if (consentee) { const input = { originId: consentee?.id, originType: conversationOriginTypes.consentee, memberId: user.id, name: `${user.firstName} ${user.lastName}`, memberType: messageAuthorTypes.user, }; joinConversation(input); } }, [consentee, joinConversation, user]); const handleAddMessage = useCallback( async message => { const content = trimWhitespace(message); const input = { conversationId: joinedConversation?.conversation?.id, memberId: currentMember.id, content, }; await addMessage(input); }, [joinedConversation, addMessage, currentMember], ); const handleResolveConversation = useCallback(async () => { await resolveConversation(joinedConversation?.conversation?.id); }, [resolveConversation, joinedConversation]); return { conversation, currentMember, handleAddMessage, handleResolveConversation, }; }; export default useConversation;