自己写的任务进度管理网站,用来管理自己日常事务,数据量小的时候没有什么问题,但单页面的数据量多时,调用的Input控件每次onChang去渲染会非卡顿,不能忍。。
原来的代码,页面数据较多时那个卡啊….
1 2 3 4 5 6 7 8 9
| editInputChange(value){ this.setState({ editLabelName:value.target.value }) }, ... <Input placeholder="编辑任务详情" value={this.state.editLabelName} onChange={this.editInputChange} onPressEnter={this.handleOk} ref={ (e) => this._input = e }/> ...
|
搜罗了一些别人的解决方法,主要是把控件组件化,再去控制是否渲染,我自己用是resutie-table的组件,并且也自定义改了部分源码,这般一拆工作量太大,这种方法不太适合。
自己就琢磨下Input控件属性,发现onBlur事件或许可以利用下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| editInputChange(value){ this.setState({ editLabelName:value.target.value },()=>{ if(this.state.isEnter){ this.handleOk() } }) }, handleOk(){
this.setState({ modalText:'正在提交数据...', isConfirmLoading:true, isEnter:false }); if (this.state.isEditModal){ const input = this._input.refs.input; input.blur(); console.log('add:',this.state.editLabelName) var rowData= this.state.rowData; if (rowData){ this.updateFetch(rowData.entry,this.state.editLabelName,0) } } }, ... <Input placeholder="编辑任务详情" onBlur={this.editInputChange} onPressEnter={this.keyboradEnter} ref={ (e) => this._input = e }/> ...
|
解决了,无比的舒畅的输入啊。(里面有个isEnter,是用来检测是否是键盘上敲了enter键的)