SolidJSS
SolidJSโ€ข3y agoโ€ข
19 replies
Merlin

Resource refetch doesn't trigger effect

I have this effect in my root layout (solid-start)

        const user = useUser();
    createEffect(() => {
        console.log(user.name, user.email);
        if (user.name) Crisp.user.setNickname(user.name);
        if (user.email) Crisp.user.setEmail(user.email);
    });


useUser:

function useUser() {
    const [user, { mutate, refetch }] = createResource(() =>
        api
            .get<{
                id: string;
                role: "GUEST" | "USER";
                email: string | null;
                name: string | null;
                teamId: string | null;
            }>("/user/me")
            .then((r) => r.data)
    );

    return {
        refetch,
        get email() {
            return user()?.email;
        },
        get name() {
            return user()?.name;
        },
    };
}


When I call that refetch function from another component, I'd expect the effect in the 1st snippet to get re-run. Am I doing anything wrong?
Was this page helpful?