# react-remountable

> [![NPM](https://nodei.co/npm/react-remountable.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/react-remountable/)

Latest version **1.0.9** (published 2018-09-15) · MIT license · 0 weekly downloads

## Install

```sh
npm install react-remountable
pnpm add react-remountable
yarn add react-remountable
bun add react-remountable
```

## Health

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

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.9 |
| Published | 2018-09-15 |
| First published | 2018-04-16 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 17.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Zheeeng |
| Maintainers | zheeeng |
| Keywords | react, remountable, remount, forcemount, typescript |

## Links

- npm: https://www.npmjs.com/package/react-remountable
- Repository: https://github.com/zheeeng/react-remountable
- npm.io page: https://npm.io/package/react-remountable

## Alternatives

- [mobx-react](https://npm.io/package/mobx-react.md) — 2.8M weekly downloads
- [rc-tree](https://npm.io/package/rc-tree.md) — 2.6M weekly downloads
- [@react-oauth/google](https://npm.io/package/@react-oauth/google.md) — 1.3M weekly downloads
- [@wagmi/connectors](https://npm.io/package/@wagmi/connectors.md) — 877.0K weekly downloads
- [vee-validate](https://npm.io/package/vee-validate.md) — 836.4K weekly downloads

## Recent versions

- 1.0.9 (latest) — 2018-09-15
- 1.0.8 — 2018-05-14
- 1.0.7 — 2018-04-23
- 1.0.6 — 2018-04-19
- 1.0.5 — 2018-04-17
- 1.0.4 — 2018-04-16
- 1.0.3 — 2018-04-16
- 1.0.2 — 2018-04-16
- 1.0.1 — 2018-04-16
- 1.0.0 — 2018-04-16

## README

# react-remountable

[![NPM](https://nodei.co/npm/react-remountable.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/react-remountable/)

[![language](https://img.shields.io/badge/%3C%2F%3E-TypeScript-blue.svg)](http://typescriptlang.org/)
[![license](https://img.shields.io/github/license/mashape/apistatus.svg)]()
[![npm version](https://img.shields.io/npm/v/react-remountable.svg)](https://www.npmjs.com/package/react-remountable)

* provides an API `remount` as prop for re-mounting component
* resets stateful component to initial state
* just use it like using the `ReactComponent::forceUpdate` API
* re-calls phases: `componentWillUnmount` -> `constructor` -> `static getDerivedStateFromProps(v16.3+)` -> `render` -> collect refs ->  `componentDidMount`

## Why

We may need:

* Refresh a component locally
* Discard the mutated state data
* Trigger some component life-cycle hooks

## Installation

```
yarn add react-remountable
```

or

```
npm install -s react-remountable
```

## Example:

```jsx
import remountable from 'react-remountable'
import { StatefulForm1, StatefulForm2, StatefulForm3 } from './Forms'

@remountable  // decorator syntax
export default class Dashboard extends React.Component {
    state = { greeting: '', whatsUp: '' }

    focusRef = (ref) => ref && ref.focus()

    handleWhatsUpChange = (e) => {
        this.setState({ whatsUp: e.target.value })
    }

    handleReset = () => {
        // 1. send log
        // 2. re-render/refresh Dashboard component and its stateful children components
        // 3. auto focus on the text input
        // 4. fetch today's greeting and render it
        this.props.remount()
    }

    async componentDidMount () {
        const { greeting } = await fetch('api.example.com/greeting').then(response.json())
        this.setState({ greeting })
    }

    render () {
        return (
            <div>
                <h1>{this.state.greeting}</h1>
                <StatefulForm1 />
                <StatefulForm2 />
                <StatefulForm3 />
                <input onChange={this.handleWhatsUpChange} ref={this.focusRef} />
                <button onClick={this.handleReset}>Reset</button>
            </div>
        )
    }

    componentWillUnmount () {
        fetch('api.example.com/log', { method: 'POST', body: JSON.stringify({ action: 'reset'}) })
    }
}
```

If the ESNext decorator syntax is not enabled:

```js
export default remountable(Dashboard)
```

## Enjoy it!

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