react antd框架的Select组件疑问

场景:我需要完成一个筛选的功能、请看下图:

UI框架:antd;组件 Select

问题:代码重复量比较多、多个筛选需要写多个Select组件 请问有没有更好的方案?
下图是我的部分代码截图;详细的代码在底部

import React from 'react'

import { Select } from 'antd';

import styles from './search.moudule.scss'

const { Option } = Select;

console.log(styles)

class Search extends React.Component {

constructor (props) {

super(props)

this.state = {

search:{

citys:"",

years:"",

grades:"",

subjects:"",

semesters:"",

states:"",

},

citys:[ // 城市list

{

key:1,

value:"北京"

},

{

key:2,

value:"上海"

}

],

years:[ // 年份list

{

key:1,

value:"2020"

},

{

key:2,

value:"2021"

}

],

grades:[ // 年级list

{

key:1,

value:"早教"

},

{

key:2,

value:"托班"

}

],

subjects:[ // 学科list

{

key:1,

value:"数学"

},

{

key:2,

value:"英语"

}

],

semesters:[ // 学期list

{

key:1,

value:"春季"

},

{

key:2,

value:"秋季"

}

],

states:[ // 状态list

{

key:1,

value:"未发布"

},

{

key:2,

value:"已开启"

}

]

}

this.handleChange = this.handleChange.bind(this)

}

handleChange(value, name) {

switch(name){

case 'citys':

console.log('城市:',value)

break;

case 'years':

console.log('年份:',value)

break;

case 'grades':

console.log('年级:',value)

break;

case 'subjects':

console.log('学期:',value)

break;

case 'semesters':

console.log('学科:',value)

break;

case 'states':

console.log('状态:',value)

break;

}

}

render() {

return (

<div>

<Select

placeholder='不限城市'

style={{ width: 200 }}

name='aaa'

labelInValue

onChange={(e) => this.handleChange(e,'citys')}

showSearch

optionFilterProp="children"

>

{

this.state.citys.map(item => {

return (

<Option value={item.key} key={item.key}>{item.value}</Option>

)

})

}

</Select>

<Select

placeholder='不限年份'

style={{ width: 200 }}

labelInValue

onChange={(e) => this.handleChange(e,'years')}

showSearch

optionFilterProp="children"

>

{

this.state.years.map(item => {

return (

<Option value={item.key} key={item.key}>{item.value}</Option>

)

})

}

</Select>

<Select

placeholder='不限年级'

style={{ width: 200 }}

labelInValue

onChange={(e) => this.handleChange(e,'grades')}

showSearch

optionFilterProp="children"

>

{

this.state.grades.map(item => {

return (

<Option value={item.key} key={item.key}>{item.value}</Option>

)

})

}

</Select>

<Select

placeholder='不限学科'

style={{ width: 200 }}

labelInValue

onChange={(e) => this.handleChange(e,'subjects')}

showSearch

optionFilterProp="children"

>

{

this.state.subjects.map(item => {

return (

<Option value={item.key} key={item.key}>{item.value}</Option>

)

})

}

</Select>

<Select

placeholder='不限学期'

style={{ width: 200 }}

labelInValue

onChange={(e) => this.handleChange(e,'semesters')}

showSearch

optionFilterProp="children"

>

{

this.state.semesters.map(item => {

return (

<Option value={item.key} key={item.key}>{item.value}</Option>

)

})

}

</Select>

<Select

placeholder='不限状态'

style={{ width: 200 }}

labelInValue

onChange={(e) => this.handleChange(e,'states')}

showSearch

optionFilterProp="children"

>

{

this.state.states.map(item => {

return (

<Option value={item.key} key={item.key}>{item.value}</Option>

)

})

}

</Select>

</div>

)

}

}

export default Search

回答

[{id: 'select1', props: {}, ...}, {id: 'select2', props: {}, ...}]

然后通过遍历渲染

m -> v

就如楼上兄台说的,还是要把所有数据整合到一起,在包一层模板进行遍历;再套select组件

以上是 react antd框架的Select组件疑问 的全部内容, 来源链接: utcz.com/a/43055.html

回到顶部