# `Soundcheck.Check.Warning.LiteralLiveComponentIdInLoop`
[🔗](https://github.com/leonqadirie/soundcheck/blob/v0.1.0/lib/soundcheck/check/warning/literal_live_component_id_in_loop.ex#L1)

## Basics

> #### This check is disabled by default. {: .neutral}
>
> [Learn how to enable it](`e:credo:config_file.html#checks`) via `.credo.exs`.

This check has a base priority of `high` and works with any version of Elixir.

## Explanation

Flags `<.live_component>` calls with a literal `id` inside a loop: on
an element with `:for`, or under one or a `<%= for ... %>` block.
Every iteration renders the component under the same id, so LiveView
raises "found duplicate ID" once the list holds two items. Tests
whose fixtures hold zero or one item never see it.

Before:

    <.live_component :for={post <- @posts} module={PostComponent} id="post" post={post} />

After:

    <.live_component :for={post <- @posts} module={PostComponent} id={"post-#{post.id}"} post={post} />

An id counts as literal when it is a plain string or an expression
without variables or assigns, such as `id={"post"}` or `id={:new}`.

Confidence: high. Tier: syntactic (works without compiling).

## Check-Specific Parameters

Use the following parameters to configure this check:

### `:excluded_paths`

  Paths to skip (atoms, binaries as path segments, or regexes).

*This parameter defaults to* `[~r/\/test\//, "test"]`.

### `:strict`

  Unused.

*This parameter defaults to* `false`.

## General Parameters

Like with all checks, [general params](`e:credo:check_params.html`) can be applied.

Parameters can be configured via the [`.credo.exs` config file](`e:credo:config_file.html`).

---

*Consult [api-reference.md](api-reference.md) for complete listing*
