{"record":{"id":"a7318d5efc1a7e0e","repo":"reflex-dev/reflex","slug":"rx-memo-does-not-support-kwargs-in-fn-nam","errorCode":null,"errorMessage":"`@rx.memo` does not support `**kwargs` in `{fn_name}`.","messagePattern":"`@rx\\.memo` does not support `\\*\\*kwargs` in `(.+?)`\\.","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"packages/reflex-base/src/reflex_base/components/memo.py","lineNumber":1362,"sourceCode":"\n\ndef _check_parameter_kind(parameter: inspect.Parameter, fn_name: str) -> None:\n    \"\"\"Reject Python parameter kinds (``*args`` / ``**kwargs`` / positional-only)\n    that memo does not support.\n\n    Args:\n        parameter: The parameter to check.\n        fn_name: The function name for error messages.\n\n    Raises:\n        TypeError: If the parameter uses an unsupported kind.\n    \"\"\"\n    if parameter.kind is inspect.Parameter.VAR_POSITIONAL:\n        msg = f\"`@rx.memo` does not support `*args` in `{fn_name}`.\"\n        raise TypeError(msg)\n    if parameter.kind is inspect.Parameter.VAR_KEYWORD:\n        msg = f\"`@rx.memo` does not support `**kwargs` in `{fn_name}`.\"\n        raise TypeError(msg)\n    if parameter.kind is inspect.Parameter.POSITIONAL_ONLY:\n        msg = f\"`@rx.memo` does not support positional-only parameters in `{fn_name}`.\"\n        raise TypeError(msg)\n\n\ndef _classify_parameter(\n    annotation: Any, param_name: str, fn_name: str\n) -> tuple[MemoParamKind, Any]:\n    \"\"\"Walk ``_CLASSIFICATION_ORDER`` and return the first matching kind.\n\n    Args:\n        annotation: The parameter annotation.\n        param_name: The parameter name (some kinds care, e.g. ``children``).\n        fn_name: The function name for error messages.\n\n    Returns:\n        The matched ``(kind, kind_data)``.\n","sourceCodeStart":1344,"sourceCodeEnd":1380,"githubUrl":"https://github.com/reflex-dev/reflex/blob/45b8ed5ab735f8a56bbb09a42384f030eb0208e7/packages/reflex-base/src/reflex_base/components/memo.py#L1344-L1380","documentation":"`@rx.memo` rejects `**kwargs` (VAR_KEYWORD) parameters because it needs a static, known set of props to generate the compiled component definition. Arbitrary keyword arguments cannot be mapped to typed props or rest props.","triggerScenarios":"Decorating a function with `@rx.memo` whose signature includes `**kwargs`, e.g. `@rx.memo def card(title: rx.Var[str], **kwargs): ...`. Raised at decoration time during parameter analysis.","commonSituations":"Porting a component factory that accepted flexible props via `**kwargs`; combining a typed prop list with a catch-all for extras; generated code that appends `**kwargs` for forward compatibility.","solutions":["Replace `**kwargs` with an `rx.RestProp` parameter, which is the supported way to capture extra props in a memo.","Declare every prop you actually pass explicitly with `rx.Var[...]` annotations.","Drop `**kwargs` entirely if all inputs are known."],"exampleFix":"# before\n@rx.memo\ndef card(title: rx.Var[str], **kwargs):\n    ...\n\n# after\n@rx.memo\ndef card(title: rx.Var[str], extra: rx.RestProp):\n    ...","handlingStrategy":"validation","validationCode":"import inspect\n\ndef memo_signature_ok(fn) -> bool:\n    return all(\n        p.kind is not inspect.Parameter.VAR_KEYWORD\n        for p in inspect.signature(fn).parameters.values()\n    )","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use rx.RestProp for prop spreading instead of **kwargs.","Keep plain **kwargs helpers outside @rx.memo.","Annotate all props with rx.Var[...]."],"tags":["reflex","memo","kwargs","signature","typeerror"],"backgroundTag":"unsupported-function-signature","analyzedSha":"45b8ed5ab735f8a56bbb09a42384f030eb0208e7","analyzedAt":"2026-08-28T19:25:27.644Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}