python下拉框二级联动_antd下拉框联动说明

先说一下效果要求,上面一个下拉框,下面一个,要求上面选中的时候,下面的内容要跟着变。

因为想到react是数据驱动的,就不打算再用jq的那种隐藏显示了,而是通过在执行类型下拉框的onChange事件中,去改变下面的下拉框的数据,渲染出不同的下拉选择。

定义数据:modeOptions是各个下拉框的值,由于选中号码的时候是输入框,这里号码的options为空。

constructor(props) {

super(props)

this.modeOptions = {

'channelMode': {options: ['通道1', '通道2', '通道3', '通道4'], text: '通道'},

'batchMode': {options: [1, 2, 3, 4, 5], text: '批次'},

'numberMode': {options: [], text: '号码'},

'areaMode': {options: ['福州市', '厦门市'], text: '区域'}

}

this.state = {

selectMode: 'channelMode'

}

this.selectMode = this.selectMode.bind(this)

}

然后在下拉框的选中事件中去设置seletMode的值,发现antd的下拉框只要直接定义onChange事件,回调函数的第一个参数就是selectMode的值。

selectMode(value) {

this.setState({

selectMode: value

})

}

然后在render里面进行一下数据处理

let modelLabel = this.modeOptions[this.state.selectMode].text;

let modelOptions = null;

if(this.modeOptions[this.state.selectMode].options.length !== 0) {

modelOptions = [];

this.modeOptions[this.state.selectMode].options.map((item, index) => {

modelOptions.push({item});

})

}

贴下代码:其实就是当选中的不是号码时,在第二个下拉框组件用上面的modelLabel和modelOptions来渲染下拉框,如果选择的是号码,就渲染一个输入框。

class DemandForm extends React.Component {

constructor(props) {

super(props)

this.modeOptions = {

'channelMode': {options: ['通道1', '通道2', '通道3', '通道4'], text: '通道'},

'batchMode': {options: [1, 2, 3, 4, 5], text: '批次'},

'numberMode': {options: [], text: '号码'},

'areaMode': {options: ['福州市', '厦门市'], text: '区域'}

}

this.state = {

selectMode: 'channelMode'

}

this.selectMode = this.selectMode.bind(this)

}

handleSubmit = (e) => {

e.preventDefault();

this.props.form.validateFieldsAndScroll((err, values) => {

if (!err) {

console.log('Received values of form: ', values);

}

});

}

selectMode(value) {

this.setState({

selectMode: value

})

}

render() {

const { getFieldDecorator } = this.props.form;

const formItemLayout = {

labelCol: {

xs: { span: 24 },

sm: { span: 6 },

},

wrapperCol: {

xs: { span: 24 },

sm: { span: 18 },

},

};

let modelLabel = this.modeOptions[this.state.selectMode].text;

let modelOptions = null;

if(this.modeOptions[this.state.selectMode].options.length !== 0) {

modelOptions = [];

this.modeOptions[this.state.selectMode].options.map((item, index) => {

modelOptions.push({item});

})

}

return (

{...formItemLayout}

label="定点执行类型:"

hasFeedback

>

{getFieldDecorator('selectMode', {

rules: [

{ required: true, message: 'Please select your country!' },

],

})(

按通道

按号码

按区域

按批次

)}

{...formItemLayout}

label={modelLabel}

hasFeedback

>

{getFieldDecorator('mode', {

rules: [

{ required: true, message: 'Please select your country!' },

],

})(

this.state.selectMode !== 'numberMode' ? {modelOptions} :

)}

);

}

}

const WrappedDemandForm = Form.create()(DemandForm);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值