私はreact/reduxでテキストエリアの値をデバウンスして、デバッグされた値をdiv#preview
に表示しようとしていますが、最初の関数呼び出し後に合成イベントの警告が表示されます。react/reduxでテキスト入力をデバウンス
私は、意図したとおりに動作しているtextareaの値の状態を処理するための減速機を持っていますが、このスニペットではローカル状態を書きました。
debounce
以外にも、それぞれの回答が返ってくるのを避けるためのより良い方法がある場合は、keypress
私は知りたいです。前もって感謝します。
class TextArea extends React.Component {
constructor(props){
super(props);
this.state = {foo: ''}
}
handleInputChange = _.debounce((e) => {
e.persist();
let value = e.target.value;
this.setState({foo: value});
}, 300);
render() {
return (
<div>
<textarea onChange={(e)=>this.handleInputChange(e)} value={this.state.foo}></textarea>
<p id="preview">{this.state.foo}</p>
</div>
);
}
}
ReactDOM.render(
<TextArea />,
document.getElementById("react")
);
<div id="react"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
あなたの価値は州に基づいていますが、デバックされた方法でのみ更新されます...それはあなたのために働くのですか?なぜあなたはデバウンスする必要がありますか? –
上記のように、私は 'プレビューdiv'を持っています。長いテンキーなどがある場合、' textarea'の100+文字のように、反応は絶え間なく再レンダリングされて地獄のように遅くなり始めます。そして、はい、デバウンスの警告が表示された後、デバウンスは1回だけ動作します。無効化された値に対して警告を出します: 'この合成イベントは、パフォーマンス上の理由から再利用されます。これが表示されている場合は、公開/無効化された合成イベントでプロパティターゲットにアクセスしています。これはnullに設定されます。元の合成イベントを回避する必要がある場合は、event.persist()を使用してください。 ' – nehel
reduxサイクルを処理するときに、ラグが発生しました。コンポーネントのローカル状態では、私はこれが起こっているのを見たことがありません。あなたはフィドルで再現できますか? –