---
title: MARKLESS_HANDLER_READS_RENDER_LOCAL
description: "An event handler reads a local from the component body that the browser cannot rebuild."
sidebar: { hidden: true }
search: { keywords: ["HANDLER_READS_RENDER_LOCAL","handler reads render local","markless error"] }
pagination: false
---

**Error** from the compiler, while it builds your `.tsrx` files.

## What happened

The handler reads a local from the component body. The body runs only for the first render, so the browser has no value for that local.

Markless prints the message, the reason, and a suggestion:

```text
MARKLESS_HANDLER_READS_RENDER_LOCAL: The `<handlerLabel>` handler reads `<localName>`, a local of the component body. The body runs only during the initial render, so the browser copy of this handler would name a variable that does not exist there.
A handler runs in the browser from graph reads, props, and module values. A `const` local built only from those is recomputed in place; any other local has no value the browser can reach.
Declare `<localName>` as `const <localName> = ...` built only from module values, props, and state; move it to module scope; or make it state: `const <localName> = state(...)`.
https://markless.dev/errors/MARKLESS_HANDLER_READS_RENDER_LOCAL
```

Words in angle brackets change from case to case.

## How to fix it

Build the local only from props, state, and imported values. Or move it to the top of the file. Or make it `state()`.

## Where it comes from

`@markless/compiler` raises this code. Source:

- [packages/compiler/src/passes/semantic-graph/diagnostics.ts](https://github.com/compiled-run/markless/blob/main/packages/compiler/src/passes/semantic-graph/diagnostics.ts)

Read [how to read a Markless error](/tooling/diagnostics), or go back to [all error codes](/errors).
