0%

解决react Input控件数据量大时输入卡顿的问题

自己写的任务进度管理网站,用来管理自己日常事务,数据量小的时候没有什么问题,但单页面的数据量多时,调用的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键的)