# ... if coming from Redux

If coming from Redux, we think you are going to be impressed with our Hello Wow! demo

This demo is to showcase Conan State, which are our reusable capsules of state.

{% content-ref url="/pages/-M9U259\_XPDDFTkNz0BF" %}
[Hello World](/tutorials/conan-state-demos/hello-wow.md)
{% endcontent-ref %}

If you are familiar with the TODO example from Redux, you might find this article also interesting:

{% embed url="<https://medium.com/conanjs/conanjs-vs-redux-comparing-a-simple-todo-app-222b87363865?source=friends_link&sk=80e501985b27f9694ac74c9bae1fbb61>" %}

Below we explore in detail the benefits of using ConanJs over Redux.

![Hi there, fellow Redux user!](/files/-MD-qg7yDz-VC1GfFuz_)

## State is easy to create

### Create simple state and actions with one line...

You can use [Conan.light](/data/conan-state/creating-state.md#conan-light)

### ... Or if you want to, create your own actions.

You can use [Conan.state](/data/conan-state/creating-state.md#conan-state) if you want to create your own custom actions.

## State is easy to update

### No need to create a pair of action/reducers

All the logic needed to update the state is encapsulated [inside the action](/data/conan-state/actions.md).

### No boilerplate needed to deal with async actions

[Async actions](/data/conan-state/life-cycle/async-handling.md) are easy to implement, and you won't need additional libraries

### No need to map dispatch to props

You can [invoke the actions directly](/data/conan-state/actions.md#invoking-the-actions) from the state

## State can be scoped

In ConanJs state is represented with Conan State, which ultimately is a plain JS object, which means that, as with any other object, you decide how to scope.

### You can have global scope like Redux...

Sometimes it makes sense to have [global state](/data/conan-state/scoping-state.md#global)

### ... or local state, if you need to

But many times, you might feel forced to add it to your global state, or you need to use other mechanisms (setState, hooks...), with ConanJs you can just make [your state local.](/data/conan-state/scoping-state.md#local)

## State can be composed.

### No need to map state to props

You can have you state distributed in many smaller states, and then [combine it](/data/conan-state/pipes-composing-state.md#two-states-to-one-state), if you need to

### No need to use selectors

You can just [filter the state](/data/conan-state/pipes-composing-state.md#filter), or [map it](/data/conan-state/pipes-composing-state.md#map)

## State can be orchestrated

### Add reactions to your state

With ConanJs is simple to write logic as a reaction to an state change, we call this [state orchestration](/data/conan-state/orchestrating-state.md), and it will help you building complex state interactions.

## Easy to test End to End

1\) Create state, 2) Perform any number of actions, **sync or async,** 3) Check the final value of the state. With ConanJs [end to end testing](/data/conan-state/testing.md) is simple

## Meaningful Logging out of the box

No need to add third party libraries to [log out what the framework is doing](/logging.md) behind the scenes

## More Demos

This demos will provide you with real world scenarios to use ConanJs

{% content-ref url="/pages/-MCqYpekM0o4-z8ydZqZ" %}
[Todos](/tutorials/conan-state-demos/todos.md)
{% endcontent-ref %}

{% content-ref url="/pages/-M9U3fePsN6qiI6QJAUJ" %}
[Github issues viewer](/tutorials/conan-state-demos/github-issues-viewer.md)
{% endcontent-ref %}

## And more...

If this was not enough, we  have some more features included.

{% content-ref url="/pages/-MCBXW8UgV5c6vQYrmzP" %}
[ConanFlow](/api/main-classes/conanflow.md)
{% endcontent-ref %}

{% content-ref url="/pages/-M9U744H3CRps68J0Tjy" %}
[Dependency Injection](/dependency-injection.md)
{% endcontent-ref %}

{% content-ref url="/pages/-MBYUa6Ifdga1DLBGzHx" %}
[ASAPs](/asaps.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/why-conanjs.../...-if-coming-from-redux.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.
