# Conan State

Conan State are capsules of state that can be reused. To learn more about how to manage data in ConanJs, have a look at our [General Concepts section](/data/general-concepts.md)

{% hint style="warning" %}
A convention used across the documentation, and that we invite you to use (but is not mandatory) is to suffix your Conan State name with a $. ie todos$
{% endhint %}

**You interact and define your Conan State with reducers and actions**

{% content-ref url="/pages/-M9Z4QHecGnta4vB5w-m" %}
[Actions & Reducers](/data/conan-state/actions.md)
{% endcontent-ref %}

**If you understand the concepts behind the actions and reducers, then you are ready to see how to create state**

{% content-ref url="/pages/-M9U3wO6w258a6tHMOq5" %}
[Creating State](/data/conan-state/creating-state.md)
{% endcontent-ref %}

**Subscribing to state will show you how to render your state either by connecting to your own components, or via live rendering**

{% content-ref url="/pages/-M9U5eYpt6BGOrR93K9g" %}
[Observing State](/data/conan-state/subscribing-state.md)
{% endcontent-ref %}

![Observing state](/files/-MCrCIHSq4xxD2PXrECs)

**With Conan, you can create small Conan State elements which will be easier to test, develop and reuse. Then, you can compose new state based on this atomic states.**

{% content-ref url="/pages/-M9U3yX1qPxyZG1LWazo" %}
[Composing State](/data/conan-state/pipes-composing-state.md)
{% endcontent-ref %}

**Not all state should be global, or in the context, or local.... With ConanJs you can easily decide how to scope your state**

{% content-ref url="/pages/-M9Z8O0kp8Z\_os\_Ni-RR" %}
[Scaling State](/data/conan-state/scoping-state.md)
{% endcontent-ref %}

**It is also possible to create interactions between Conan States, for this, you can leverage the reactions**

{% content-ref url="/pages/-MBYUA5WpIuTFb\_RnQx6" %}
[Orchestrating State](/data/conan-state/orchestrating-state.md)
{% endcontent-ref %}

![](/files/-MBirIq5m9CJNqTpxVjZ)

**Error handling is built-in to make your life easier...**

{% content-ref url="/pages/-MBmrqVj\_VvbyYinkfgC" %}
[Life cycle](/data/conan-state/life-cycle.md)
{% endcontent-ref %}

**... and so it is managing async use cases ...**

{% content-ref url="/pages/-M9U47JMLJUwzYtw5l00" %}
[Async handling](/data/conan-state/life-cycle/async-handling.md)
{% endcontent-ref %}

**... and testing is as simple as testing a normal JS object**

{% content-ref url="/pages/-M9U4Da0nvR6lTc3QLb5" %}
[Testing state](/data/conan-state/testing.md)
{% endcontent-ref %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.conanjs.io/data/conan-state.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
