This commit is contained in:
Martti Malmi 2021-09-27 13:17:06 +03:00
parent 580c934a8f
commit a632af745e
2 changed files with 10 additions and 8 deletions

View File

@ -1,13 +1,15 @@
--- ---
layout: post layout: post
title: "Gun.js: The Best Solution for React State Management" title: "Gun.js: Painless React State Management"
date: 2021-9-27 01:37:00 +0000 date: 2021-9-27 01:37:00 +0000
tags: software tags: software
published: true published: true
description: "Better alternative to Redux" description: "Better alternative to Redux"
image: https://siriusbusiness.fi/assets/images/posts/cheesecake.jpg image: https://siriusbusiness.fi/assets/images/posts/painless.jpg
--- ---
![I feel no pain](/assets/images/posts/painless.jpg)
Fed up with writing a ton of Redux boilerplate just to make a form input editable? Fed up with writing a ton of Redux boilerplate just to make a form input editable?
Theres a better alternative: Gun.js. It makes state synchronization and persistence super easy. Theres a better alternative: Gun.js. It makes state synchronization and persistence super easy.
@ -25,29 +27,29 @@ const State = new Gun({
Then create a React component that uses the state: Then create a React component that uses the state:
```jsx ```jsx
class CommentForm extends React.Component { class TextInput extends React.Component {
constructor() { constructor() {
super(); super();
this.state = {comment:''}; this.state = {text:''};
} }
componentDidMount() { componentDidMount() {
State.get('comment').on(comment => this.setState({comment})); State.get('text').on(text => this.setState({text}));
} }
onInput(e) { onInput(e) {
State.get('comment').put(e.target.value); State.get('text').put(e.target.value);
} }
render() { render() {
return ( return (
<form class="box"> <form class="box">
<input placeholder="Type something" type="text" value={this.state.comment} onChange={e => this.onInput(e)} /> <input placeholder="Type something" type="text" value={this.state.text} onChange={e => this.onInput(e)} />
</form> </form>
); );
} }
} }
``` ```
Now you have a comment form that syncs its content across component instances and persists it in localStorage. Now you have a text form that syncs its content across component instances and persists it in localStorage.
See the working example on [Codepen](https://codepen.io/mmalmi/pen/VwWVdKG). See the working example on [Codepen](https://codepen.io/mmalmi/pen/VwWVdKG).

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB