# Value

Source code is hosted on [GitHub](https://github.com/corets/value)

{% tabs %}
{% tab title="yarn" %}

```bash
yarn add @corets/value
```

{% endtab %}

{% tab title="npm" %}

```bash
npm install --save @corets/value
```

{% endtab %}
{% endtabs %}

Seamless React integration is shipped in a separate package:

{% content-ref url="../hooks/use-value" %}
[use-value](https://docs.corets.io/hooks/use-value)
{% endcontent-ref %}

These packages provide extended functionality and are built on top of this library:

{% content-ref url="store" %}
[store](https://docs.corets.io/observables/store)
{% endcontent-ref %}

{% content-ref url="list" %}
[list](https://docs.corets.io/observables/list)
{% endcontent-ref %}

{% content-ref url="local-storage-value" %}
[local-storage-value](https://docs.corets.io/observables/local-storage-value)
{% endcontent-ref %}

{% content-ref url="local-storage-store" %}
[local-storage-store](https://docs.corets.io/observables/local-storage-store)
{% endcontent-ref %}

{% content-ref url="local-storage-list" %}
[local-storage-list](https://docs.corets.io/observables/local-storage-list)
{% endcontent-ref %}

## createValue()

Create a new observable value:

```typescript
import { createValue } from "@corets/value"

const count = createValue(0)
```

Create a new observable value without the factory function:

```typescript
import { Value } from "@corets/value"

const value = new Value(0)
```

Create a new observable value with a custom differ:

```typescript
import { createValue } from "@corets/value"

const differ = (oldValue, newValue) => true
const count = createValue(0, { differ })
```

## Value.get()

Get current value:

```typescript
value.get()
```

## Value.set()

Update current value:

```typescript
value.set("new value")
```

## Value.listen()

Listen to value changes:

```typescript
const unsubscribe = value.listen((value) => console.log(value))

unsubscribe()
```

Invoke listener immediately:

```typescript
value.listen((value) => console.log(value), { immediate: true })
```

Listen with a custom differ:

```typescript
const differ = (oldValue, newValue) => true

value.listen((value) => console.log(value), { differ })
```

## Value.use()

Convenience method for people used to React's `useState` syntax:

```typescript
import { createValue } from "@corets/value"

const [value, setValue] = createValue(1).use()
```
