Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/dai-shi/svelte3-redux

[NOT MAINTAINED] Redux for Svelte 3
https://github.com/dai-shi/svelte3-redux

redux svelte svelte3

Last synced: 27 days ago
JSON representation

[NOT MAINTAINED] Redux for Svelte 3

Awesome Lists containing this project

README

        

# svelte3-redux

[![CI](https://img.shields.io/github/workflow/status/dai-shi/svelte3-redux/CI)](https://github.com/dai-shi/svelte3-redux/actions?query=workflow%3ACI)
[![npm](https://img.shields.io/npm/v/svelte3-redux)](https://www.npmjs.com/package/svelte3-redux)
[![size](https://img.shields.io/bundlephobia/minzip/svelte3-redux)](https://bundlephobia.com/result?p=svelte3-redux)

Redux for Svelte 3

## Introduction

This is an experimental project to combine Redux and Svelte3.
It provides the same state usage tracking support
in [reactive-react-redux](https://github.com/dai-shi/reactive-react-redux).

## Install

```bash
npm install svelte3-redux
```

## Usage (bind)

This is simple usage.
Reactivity works for all components.

```html

import { createStore } from 'redux';
import { bind } from 'svelte3-redux';

const initialState = {
count: 0,
text: 'hello',
};

const reducer = (state = initialState, action) => {
switch (action.type) {
case 'increment': return { ...state, count: state.count + 1 };
case 'decrement': return { ...state, count: state.count - 1 };
case 'setText': return { ...state, text: action.text };
default: return state;
}
};

const store = createStore(reducer);
const state = bind(store);

Counter




Count: {$state.count}
state.dispatch({ type: 'increment' })}>+1
state.dispatch({ type: 'decrement' })}>-1



TextBox




Text: {$state.text}
state.dispatch({ type: 'setText', text: event.target.value })} />


```

## Usage (bindTracked)

This is recommended usage.
Reactivity works based on state usage tracking.

### store.js

```javascript
import { createStore } from 'redux';
import { bindTracked } from 'svelte3-redux';

const initialState = {
count: 0,
text: 'hello',
};

const reducer = (state = initialState, action) => {
switch (action.type) {
case 'increment': return { ...state, count: state.count + 1 };
case 'decrement': return { ...state, count: state.count - 1 };
case 'setText': return { ...state, text: action.text };
default: return state;
}
};

const store = createStore(reducer);
export default () => bindTracked(store);
```

### Counter.svelte

```html

import getTrackedState from './store';

const state = getTrackedState();

Counter




Count: {$state.count}
state.dispatch({ type: 'increment' })}>+1
state.dispatch({ type: 'decrement' })}>-1


```

### TextBox.svelte

```html

import getTrackedState from './store';

const state = getTrackedState();

TextBox




Text: {$state.text}
state.dispatch({ type: 'setText', text: event.target.value })} />


```

## API

### bind

Take Redux store and return a global state for Svelte.

#### Parameters

- `store` **Store<State, Action>**

#### Examples

```javascript
import { createStore } from 'redux';
import { bind } from 'svelte3-redux';

const store = createStore(reducer);
export default bind(store);
```

### bindTracked

Take Redux store and return a global state for Svelte.
With state usage tracking.

#### Parameters

- `store` **Store<State, Action>**

#### Examples

```javascript
import { createStore } from 'redux';
import { bindTracked } from 'svelte3-redux';

const store = createStore(reducer);
export default () => bindTracked(store);
```

## Examples

The [examples](examples) folder contains working examples.
You can run one of them with

```bash
PORT=8080 npm run examples:01_minimal
```

and open in your web browser.