---
title: "object-repeat"
description: "Version Compatibility"
permalink: /docs/build/ui-components/all-ui-components/object-repeat/
---
# object-repeat

<Info>

Version Compatibility

`object-repeat` was introduced in version **4.21.0** of the JourneyApps Container.

</Info>

<Warning title={"Alpha Feature"}>

`object-repeat` is currently in alpha status. There are some known issues:

* Performance is slow, especially when used with OnlineDB.
* Nesting `object-repeat` inside another `object-repeat` does not work as expected.
* It is not possible to use an advanced `query` inside a nested `object-table` or `object-list` (e.g. sorting, or anything other than a direct `has-many` relationship on the object).

Issues that have been fixed:

* The data inside the `object-repeat` does not always reload properly when changed (e.g. after a sync). This was fixed in version 4.27 of the JourneyApps Container.

</Warning>

### Syntax

```xml
<object-repeat query="myquery" as="item">
    <card>
        <content>{item.message}</content>
    </card>
    <button label="Read" on-press="$:item.read = true" />
</object-repeat>
```

| Attribute | Description |
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `query` | The collection to loop over.(The same as, e.g., `object-table`)A view variable of type `query:` or `array:` |
| `as` | variable name to be used for the repeating object |

### Scoping

`object-repeat` creates a new “virtual scope” used for nested components. This specifically includes the current object, under the name specified in the `as` attribute. This is relevant for:

1. Shorthand expressions.
2. Parameters passed to JS functions.

### Nesting

Most components are allowed to be nested, with some specific exceptions:

* `columns/column`
* `sidebar`

Please note:

* Nested `object-repeat` s are allowed, but do not currently function correctly.

### More detailed example

```xml
<view>
  <var name="mytext" type="text" />
  <var name="myquery" type="query:item" />
  <object-repeat query="myquery" as="item">
    <card>
      <!-- View variables can be referenced in shorthand expressions,
      as well as `item`. -->
      <heading>{mytext}: {item.title}</heading>
      <content>{item.message}</content>
      <action on-press="myfunction(mytext, item)" />
    </card>
    <!-- `item` can be used in JS expressions. However, view variables need view. -->
    <button label="Read" on-press="$:myfunction(view.mytext, item)" />
  </object-repeat>
</view>
```

### Performance notes

* Due to its complexity, `object-repeat` does not offer the same performance and speed than `object-list` and `object-table`. Therefore, it is recommended to keep the number of objects in your collection < 20, and never more than around 50.
* `object-repeat` is currently very slow when used with `OnlineDB` - the user will see items loading one by one. As a workaround, always use `object-repeat` with an `array` and not a `query` when using `OnlineDB`.
