ReactJS: 모든 입력 필드에 대한 자동 저장 기능
다음은 한 가지 예입니다.
우리 팀은 텍스트 상자 입력에 대해 간단한 디바운스 자동 저장 기능을 구현하기를 원했습니다. 처음에 우리는 lodash의 디바운스를 사용하여 작동하도록 했습니다. 작동하는 것 같았고 우리는 그것을 시작했습니다. 그러나 고객들은 텍스트 상자에 타이핑하는 것이 불안해 보인다는 불만을 가지고 돌아왔습니다. 따라서 이전 코드는 다음과 같습니다.
import { debounce } from "lodash";
import RichText from "../controls/rich_text";
...
class TextQuestion extends React.Component {
constructor(props) {
super(props);
this.update = debounce(this._update.bind(this), 500);
}
_update(text) {
this.setState({ text });
callAPIToSaveText({ answer: text });
}
...
render() {
...
<RichText.NoToolbar editorClass="small" value={this.state.text} onChange={this.update} />
}
}
이것은 작동하지 않을 때 작동합니다 :) e.g. 사용자가 문자 사이에 약 0.5초 간격으로 입력할 때. 앱은 텍스트를 저장하고 저장 후 입력한 내용을 삭제하면서 저장된 텍스트로 텍스트 상자를 다시 렌더링합니다.
버그를 수정하기 위해 다음과 같이 바닐라 JS의 setTimeout을 사용하기로 했습니다.
import RichText from "../controls/rich_text";
const SavingState = Object.freeze({
NOT_SAVED: 0,
SAVING: 1,
SAVED: 2
});
class TextQuestion extends React.Component {
constructor(props) {
super(props);
this.state = {
text: "",
saving: SavingState.NOT_SAVED
};
this.update = this.update.bind(this);
}
componentDidMount() {
this.timer = null;
}
update(text) {
clearTimeout(this.timer);
this.setState({ text, saving: SavingState.NOT_SAVED });
this.timer = setTimeout(() => {
this.setState({ text, saving: SavingState.SAVING });
// calls API
callAPIToSaveText({ answer: text })
.then(() => this.setState({ saving: SavingState.SAVED }));
}, 500);
}
render() {
<RichText.NoToolbar editorClass="small" value={this.state.text} onChange={this.update} />
<AutoSaveDisplay saving={this.state.saving} />
}
}
const AutoSaveDisplay = ({ saving }) => {
let display;
switch (saving) {
case SavingState.SAVING:
display = <em>saving...</em>;
break;
case SavingState.SAVED:
display = (
<>
<Icon check /> <em>saved!</em>
</>
);
break;
default:
display = <br />;
}
return <div className="auto-save-display">{display}</div>;
};
AutoSaveDisplay.propTypes = {
saving: PropTypes.oneOf(Object.values(SavingState))
};
// styles I use for auto-save-display
// .auto-save-display {
// display: block;
// height: 25px;
//}
시작합니다. 이제 자동 저장이 작동합니다! 위에서 본 AutoSaveDisplay 구성 요소는 텍스트를 저장할 때 "saving..."및 "saved"를 표시하는 최고의 보너스 중 하나일 뿐입니다.
Reference
이 문제에 관하여(ReactJS: 모든 입력 필드에 대한 자동 저장 기능), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mreigen/reactjs-auto-save-feature-for-any-input-field-1d37텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)