-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ENG-4153]Use empty string for None values in rx.input
and rx.el.input
#4521
Changes from 9 commits
3de01d1
302b810
6b20287
76034a1
768e15a
1cddb88
31462ad
437d421
fb8e28c
7286ec5
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -18,6 +18,7 @@ | |
prevent_default, | ||
) | ||
from reflex.utils.imports import ImportDict | ||
from reflex.utils.types import is_optional | ||
from reflex.vars import VarData | ||
from reflex.vars.base import LiteralVar, Var | ||
|
||
|
@@ -384,6 +385,33 @@ class Input(BaseHTML): | |
# Fired when a key is released | ||
on_key_up: EventHandler[key_event] | ||
|
||
@classmethod | ||
def create(cls, *children, **props): | ||
"""Create an Input component. | ||
|
||
Args: | ||
*children: The children of the component. | ||
**props: The properties of the component. | ||
|
||
Returns: | ||
The component. | ||
""" | ||
from reflex.vars.number import ternary_operation | ||
|
||
value = props.get("value") | ||
|
||
# React expects an empty string(instead of null) for uncontrolled inputs. | ||
if value is not None and is_optional( | ||
(value_var := Var.create(value))._var_type | ||
): | ||
props["value"] = ternary_operation( | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It seems like adding a ternary to every This does potentially create an issue where the Var is not typed optional, but still ends up with a I know it's probably negligible and maybe not worth optimizing for, but perhaps we should profile text field re-render time with and without a ternary in the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
This would be great and keep the generated code simpler and faster for values which will never be None
I agree, we should not bother too much about wrongly annotated vars.
While profiling is a great idea, I think it's a bit overkill if we only do this for optional values. However, I do not want to stop anyone from doing that :D |
||
(value_var != Var.create(None)) # pyright: ignore [reportGeneralTypeIssues] | ||
& (value_var != Var(_js_expr="undefined")), | ||
value, | ||
Var.create(""), | ||
) | ||
return super().create(*children, **props) | ||
|
||
|
||
class Label(BaseHTML): | ||
"""Display the label element.""" | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: aren't these controlled inputs when a value is passed
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ah yeah, good catch