# addRecommendationListener()

> Calls listener now (once known) and on every change.

Source: https://docs.tryyoursize.com/reference/react-native/add-recommendation-listener/

*Function* · `@tryyoursize/react-native`

Calls `listener` now (once known) and on every change. Returns `{ remove }`.

```ts
function addRecommendationListener(product: string, listener: (r: Recommendation) => void): { remove(): void }
```

## Parameters

- **`product`** (`string`, required): Your product ID or SKU.
- **`listener`** (`(r: Recommendation) => void`, required): Called now (once known) and on every change.

## Returns

`{ remove(): void }`: `{ remove() }`.

## Example

**React Native**

```tsx
useEffect(() => {
  const sub = addRecommendationListener("SKU-123", (rec) => {
    if (rec.status === "ready" && !touched) setSize(rec.size);
  });
  return () => sub.remove();
}, []);
```

**Swift**

```swift
let sub = tys.onRecommendation(for: "SKU-123") { rec in
    if rec.status == .ready, !touched { selectedSize = rec.size }
}
// keep `sub`; sub.cancel() when the screen goes away
```

**Kotlin**

```kotlin
val sub = tys.onRecommendation("SKU-123") { rec ->
    if (rec.status == Recommendation.Status.READY && !touched) selected = rec.size
}
// sub.cancel() in onDestroy
```

**Flutter**

```dart
final sub = tys.onRecommendation('SKU-123').listen((rec) {
  if (rec.status == RecommendationStatus.ready && !touched) setState(() => size = rec.size);
});
// sub.cancel() in dispose()
```
