reflex icon indicating copy to clipboard operation
reflex copied to clipboard

No error is raised when EventSpec is used as a Component child

Open j-bennet opened this issue 6 months ago β€’ 4 comments

Describe the bug

I'm getting a TypeError: Class constructor Event cannot be invoked without 'new' on the frontend.

To Reproduce

I'm not very sure what's happening, but here is the stack:

TypeError: Class constructor Event cannot be invoked without 'new'
    at Box_4b732d969094035c599769db3dd6fba2 (webpack-internal:///(pages-dir-node)/./pages/index.js:27:14)
    at react-stack-bottom-frame (file:///Users/jbennet/src/flaire-pulse-ai/.web/node_modules/react-dom/cjs/react-dom-server.edge.development.js:9251:18)
    at renderWithHooks (file:///Users/jbennet/src/flaire-pulse-ai/.web/node_modules/react-dom/cjs/react-dom-server.edge.development.js:4898:19)
    at renderElement (file:///Users/jbennet/src/flaire-pulse-ai/.web/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5333:23)
    at retryNode (file:///Users/jbennet/src/flaire-pulse-ai/.web/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6092:31)
    at renderNodeDestructive (file:///Users/jbennet/src/flaire-pulse-ai/.web/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6042:11)
    at renderNode (file:///Users/jbennet/src/flaire-pulse-ai/.web/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6499:18)
    at renderChildrenArray (file:///Users/jbennet/src/flaire-pulse-ai/.web/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6375:9)
    at retryNode (file:///Users/jbennet/src/flaire-pulse-ai/.web/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6116:13)
    at renderNodeDestructive (file:///Users/jbennet/src/flaire-pulse-ai/.web/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6042:11)
    at renderElement (file:///Users/jbennet/src/flaire-pulse-ai/.web/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5512:13)
    at retryNode (file:///Users/jbennet/src/flaire-pulse-ai/.web/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6092:31)
    at renderNodeDestructive (file:///Users/jbennet/src/flaire-pulse-ai/.web/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6042:11)
    at finishFunctionComponent (file:///Users/jbennet/src/flaire-pulse-ai/.web/node_modules/react-dom/cjs/react-dom-server.edge.development.js:4942:13)
    at renderElement (file:///Users/jbennet/src/flaire-pulse-ai/.web/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5384:11)

This is my first time using Reflex. I'm good with Python, but not good with anything frontend.

  • Code/Link to Repo:

The index page triggering the error looks like this:

import reflex as rx

from ..state import State


def index() -> rx.Component:
    """The index page that redirects to home if logged in, otherwise to login."""
    return rx.box(
        rx.cond(State.is_authenticated, rx.redirect("/home"), rx.redirect("/login"))
    )

Expected behavior

No error?

Screenshots

Image

Specifics (please complete the following information):

  • Python Version: 3.12
  • Reflex Version: 0.7.14
  • OS: MacOS
  • Browser (Optional): Chrome

Additional context Add any other context about the problem here.

j-bennet avatar Jun 13 '25 05:06 j-bennet

The syntax is wrong, you can't have a rx.redirect directly as a child of a component.

You need to bind that event to an event trigger.

Lendemor avatar Jun 13 '25 11:06 Lendemor

If you want to execute logic when the page open, attach this to the on_load trigger when adding the page.

Lendemor avatar Jun 13 '25 11:06 Lendemor

@Lendemor

If you want to execute logic when the page open, attach this to the on_load trigger when adding the page.

Genius. This worked. Thank you! I didn't discover this recipe at first:

https://reflex.dev/docs/events/page-load-events/

j-bennet avatar Jun 13 '25 15:06 j-bennet