本人react初学者,在使用时遇到的问题,并且解决了,所以和大家一起分享
我是用的是react + ant-design开发的,不啰嗦直接上问题代码
return ( <div> <BaseTitle title='专家库' /> <span> <Select datas={this.state.selectData1} lable='所属单位:' placeholder='选择所属单位' value="dictCode" name="dictName" width="20%" /> <Select datas={this.state.Data2} lable='设备专业:' placeholder='选择设备专业' value="gpCode" name="gpName" width="20%"/> <Search style={{width: '25%'}}/> </span> <GlobalTable columns={columns} dataSource= {this.state.dataSource} RowClick={this.RowClick}/> </div> )
上面的两个select是我自己结合antd自己写的select组件
render() { var {datas, lable, placeholder, value, name, width} = this.props; selectChildrens = []; datas.map((item, index) => { selectChildrens.push(<Option key={item[value]}>{item[name]} </Option>) }); return ( <span> <span>{lable}</span> <Select showSearch style={{ width: width }} placeholder={placeholder} optionFilterProp="children" onChange={this.handleChange} onBlur={this.handleBlur} onFocus={this.handleFocus} filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0} > {selectChildrens} </Select> </span> )
里面最主要的就是render之后
selectChildrens = [];
这步操作是每次渲染的时候清空options里面的数据源,为什么这么做呢,因为页面上调用了两次select组件,也就请求了两次数据源
react的setState首先是异步的,然后他是在每次设置数据源的时候都重新渲染相关组件(这是react社区中找到的答案,渲染机制问题),这样就出现问题了,如果使用的是数组
然后又执行了push操作,就出现了,不可思议的事情,就是数据源里面的数据会增加,每一次渲染都会增加,因为是push操作,这里其实我也不想用push,但是antd的框架给option赋值就是这样设计的
如果每次清空就解决问题了,小伙伴在js中操作数组一定要注意push操作。另外希望我遇到的问题对大家有帮助
浙公网安备 33010602011771号