# rescript-redux

> 👋 rescript-redux ----------------

Latest version **0.0.1** (published 2023-03-01) · MIT license · 0 weekly downloads

## Install

```sh
npm install rescript-redux
pnpm add rescript-redux
yarn add rescript-redux
bun add rescript-redux
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.1 |
| Published | 2023-03-01 |
| First published | 2023-03-01 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 3 |
| Unpacked size | 5.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | kaylew |
| Maintainers | kaylew |
| Keywords | rescript |

## Links

- npm: https://www.npmjs.com/package/rescript-redux
- npm.io page: https://npm.io/package/rescript-redux

## Dependencies (3)

- [redux](https://npm.io/package/redux.md) ^4.2.1
- [rescript](https://npm.io/package/rescript.md) *
- [react-redux](https://npm.io/package/react-redux.md) ^8.0.5

## Recent versions

- 0.0.1 (latest) — 2023-03-01

## README

👋 rescript-redux
----------------

Zero-cost bindings of Redux and React-Redux for Rescript.


☂️ Adding dependencies
----------------

```console
npm install rescript @rescript/react -D
```

```console
npm install react react-dom redux react-redux -S
```

💫 Installation
----------------

```console
npm install rescript-redux -D
```

✨ Adding bs-dependencies
----------------

```diff
{
  ...
  "bs-dependencies": [
+    "@rescript/react",
+    "rescript-redux"
  ],
  ...
+ "jsx": { "version": 3}
  ...
}
```


🚀 usage
----------------

##### createStore

```rescript
type state = {
    message: string,
    count: int
}

type action = 
    | Send(string)
    | Add(int)
    | Mult(int)
    | Update(string, int)

let reducer = ({ message, count }, action) => {
    switch action {
    | Send(name) => {message: message ++ name,count}
    | Add(x) => {message, count: count + x}
    | Mult(x) => {message, count: count * x}
    | Update(message, count) => {message,count}
    }
}

let store = Redux.createStore(reducer, {message: "", count: 0})
```


🏆 Hook API
--------------

##### Provider
##### useDispatch
##### useSelector
##### useStore

```rescript
module App = {
    open ReduxReact 
    open React
    @react.component
    let make = () => {
        let dispatch = useDispatch()
        let getDoubleCount = useSelector(({count}) => count * 2)
        let sayHello = useSelector(({message}) => message ++ "Hello")
        let store = useStore()
        let onClick = (_) => {
            dispatch(Add(1))
        }
        <>
            <h3>{store.getState().count->int}</h3>
            <h3>{store.getState().message->string}</h3>
            <h3>{getDoubleCount->int}</h3>
            <h3>{sayHello->string}</h3>
            <button onClick>{"plus 1"->string}</button>
        </>
    }
}

switch ReactDOM.querySelector("#root") {
| Some(rootElement) => {
    let root = ReactDOM.Client.createRoot(rootElement)
    ReactDOM.Client.Root.render(
        root,
        <ReduxReact.Provider store>
            <App />
        </ReduxReact.Provider> 
    )
  }
| None => ()
}
```

---
_Source: https://npm.io/package/rescript-redux · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
