Reflex Cloud - Fast, secure & scalable hosting. One command to deploy.

Match

The rx.match feature in Reflex serves as a powerful alternative to rx.cond for handling conditional statements. While rx.cond excels at conditionally rendering two components based on a single condition, rx.match extends this functionality by allowing developers to handle multiple conditions and their associated components. This feature is especially valuable when dealing with intricate conditional logic or nested scenarios, where the limitations of rx.cond might lead to less readable and more complex code.

With rx.match, developers can not only handle multiple conditions but also perform structural pattern matching, making it a versatile tool for managing various scenarios in Reflex applications.

Basic Usage

The rx.match function provides a clear and expressive syntax for handling multiple conditions and their corresponding components:

  • condition: The value to match against.
  • (case_i, component_i): A Tuple of matching cases and their corresponding return components.
  • default_component: A special case for the default component when the condition isnt matched by any of the match cases.

Example

Unknown cat breed selected.

Default Case

The default case in rx.match serves as a universal handler for scenarios where none of the specified match cases aligns with the given match condition. Here are key considerations when working with the default case:

  • Placement in the Match Function: The default case must be the last non-tuple argument in the rx.match component. All match cases should be enclosed in tuples; any non-tuple value is automatically treated as the default case. For example:

The above code snippet will result in an error due to the misplaced default case.

  • Single Default Case: Only one default case is allowed in the rx.match component. Attempting to specify multiple default cases will lead to an error. For instance:
  • Optional Default Case for Component Return Values: If the match cases in a rx.match component return components, the default case can be optional. In this scenario, if a default case is not provided, rx.fragment will be implicitly assigned as the default. For example:

In this case, rx.fragment is the default case. However, not providing a default case for non-component return values will result in an error:

The above code snippet will result in an error as a default case must be explicitly provided in this scenario.

Handling Multiple Conditions

rx.match excels in efficiently managing multiple conditions and their corresponding components, providing a cleaner and more readable alternative compared to nested rx.cond structures.

Consider the following example:

Unknown animal breed

In a match case tuple, you can specify multiple conditions. The last value of the match case tuple is automatically considered as the return value. It's important to note that a match case tuple should contain a minimum of two elements: a match case and a return value. The following code snippet will result in an error:

Usage as Props

Similar to rx.cond, rx.match can be used as prop values, allowing dynamic behavior for UI components:

0

In the example above, the background color property of the box component containing State.value changes to red when state.value is 1, blue when its 5, green when its 5, orange when its 15 and black for any other value.

The example below also shows handling multiple conditions with the match component as props.

0

API Reference

rx.match

Match cases based on a condition.

PropType | ValuesDefault
cond
Any
match_cases
List
[]
default
Any

Event Triggers

See the full list of default event triggers