Skip to main content

Optics

What are Optics?​

Optics help you “zoom in” on a specific part of a bigger structure, without disturbing the rest.

Benefits of Optics​

  • Efficiency: Optics make manipulating nested state (like user profiles) simple, meaning that there's no need to rewrite the whole state object.
  • Modularity: Optics help you modularize access to deeply nested data, making code cleaner and more scalable.

Example: Optic in Action​

const ageLens = {
get: obj => obj.profile.age,
set: (obj, val) => ({
...obj,
profile: { ...obj.profile, age: val },
}),
};

const user = { profile: { name: "Alex", age: 25 }, active: true };
const updated = ageLens.set(user, 26);
console.log(updated.profile.age); // 26

In the above example, the ageLens function is an optic that returns the age of a user, making it easier to access and modify the age property.


How it Connects to Refract​

Optics form the backbone of Refract’s reactive state management. Build and combine them to shape how your UI responds, making it smoothly composable and perfectly maintainable.