⚠️ This library is currently pre-release and the API is subject to change without warning!
Consider using this component if:
- You are looking to integrate auto-save functionality in an input-based form
- You are looking for a solution where auto-save occurs with a configurable delay
- You are looking to bind auto-save events to input events such as blur or when user becomes idle
- You want a simple loop based auto-save trigger which can be toggled on/off
-
Exposes a component called
AutoSaver
that has a proponAutosaveTriggered
which allows you to specify a callback whenever the component determines that auto save should occur -
Exposes a component called
WatchChanges
which can be placed as a child of the parentAutoSaver
. This component can bind to inputs using React refs and triggers whenever the following happens:
- An input is blurred
- An input
onChange
callback fires and then becomes idle didChangeHappen
callback function is manually called
-
Allows configuring a global auto-save delay for the
onAutosave
callback -
Allows configuring auto-save delays per
WatchChanges
instance, so you can fine tune exactly how soon or late the autosave event is triggered on per-component basis -
Allows toggling on/off an autosave loop
Install the library using a package manager of your choice:
# npm
npm i react-autosaver --save
# yarn
yarn add react-autosaver
Import components as needed:
import { AutoSave } from 'react-autosaver';
react-autosaver
has the following peer dependencies:
"prop-types": "^15.7.2"
"react": "^16.8.0"
"react-dom": "^16.8.0"
- With auto-save loop
import React, { useState, useCallback } from 'react';
import { AutoSave, WatchChanges } from 'react-autosaver';
export default function App() {
const [isSaving, setIsSaving] = useState(false);
const callback = useCallback(() => {
console.log('Lets autosave now!');
}, []);
return (
<AutoSave
isAutosaving={isSaving}
enableAutosaveLoop
onAutosaveTriggered={callback}
/>
);
}
- With
WatchChanges
import React, { useState, useCallback } from 'react';
import { AutoSave, WatchChanges } from 'react-autosaver';
export default function App() {
const [input, setInput] = useState('');
const [isSaving, setIsSaving] = useState(false);
const triggerAutoSave = useCallback(() => {
console.log('Lets autosave now!');
}, []);
const onInputChange = (e) => {
setInput(e.target.value);
};
return (
<AutoSave isAutosaving={isSaving} onAutosaveTriggered={triggerAutoSave}>
<WatchChanges triggerMode="BLUR">
{({ autosaveInputRef }) => {
return (
<>
<label>I trigger autosave on blur</label>
<input
ref={autosaveInputRef}
value={input}
onChange={onInputChange}
/>
</>
);
}}
</WatchChanges>
</AutoSave>
);
}
WatchChanges
exposes a didChangeHappen
callback function which you can call manually. You are not restricted to using inputs bound with a ref, and can manually trigger autosave whenever you determine a save should occur based on your application logic.
<WatchChanges triggerMode="IDLE" inputInputIdleDelay={1500}>
{({ didChangeHappen }) => {
return (
<>
<label>Custom input which autosaves manually</label>
<input
onChange={() => {
didChangeHappen();
}}
/>
</>
);
}}
</WatchChanges>
- TypeScript support
- ES modules support
- Does not rely on other third-party dependencies
// TODO
// TODO