我試圖用react/redux去除textarea的值,並在div#preview
中顯示去抖值,但是我在第一次函數調用後收到合成事件警告。debounce textarea input with 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個以上的字符,由於不斷重新渲染,反應開始變得遲緩。是的,在給定的防反跳時間警告顯示之後,防抖動僅工作一次。對無效值做出反應警告:'由於性能原因,此綜合事件被重用。如果您看到這一點,那麼您正在訪問已發佈/無效合成事件的屬性目標。這被設置爲空。如果你必須保持原來的合成事件,使用event.persist()。' – nehel
我在處理redux週期時遇到了延遲。關於組件的本地狀態,我還沒有看到這種情況發生..你能在小提琴中重現嗎? –