3
ユーザーがReactコンポーネントでフォームに記入すると、自動保存を実行します。最後のonChange
イベントから3秒が経過すると、ajaxコールがトリガーされます。タイムアウト後のデータベースへの自動保存
以下のコードは、an instructive articleからインスピレーションを受けています。これは、setTimeout
とclearTimeout
でこれを達成する方法を示しています。しかし、私はReactの実装で何か間違っています.3秒の遅延は入力時に尊重されません。
何が問題なのですか?または、私はこの問題を解決する方法について、すべて一緒に間違っていると思いますか?
class Form extends Component {
constructor() {
super();
this.state = {
isSaved: false
};
this.handleUserInput = this.handleUserInput.bind(this);
this.saveToDatabase = this.saveToDatabase.bind(this);
}
saveToDatabase() {
var timeoutId;
this.setState({isSaved: false});
if (timeoutId) {
clearTimeout(timeoutId)
};
timeoutId = setTimeout(() => {
// Make ajax call to save data.
this.setState({isSaved: true});
}, 3000);
}
handleUserInput(e) {
const name = e.target.name;
const value = e.target.value;
this.setState({[name]: value});
this.saveToDatabase();
}
render() {
return (
<div>
{this.state.isSaved ? 'Saved' : 'Not saved'}
// My form.
</div>
)
}