视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
antd下拉框联动使用步骤详解
2020-11-27 19:46:24 责编:小采
文档
 这次给大家带来antd下拉框联动使用步骤详解,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(<option key={index}>{item}</option>);
 })
 }

贴下代码:其实就是当选中的不是号码时,在第二个下拉框组件用上面的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(<option key={index}>{item}</option>);
 })
 }
 return (
 <Form className="blackForm" onSubmit={this.handleSubmit}>
 <FormItem
 {...formItemLayout}
 label="定点执行类型:"
 hasFeedback
 >
 {getFieldDecorator('selectMode', {
 rules: [
 { required: true, message: 'Please select your country!' },
 ],
 })(
 <Select onChange={this.selectMode} placeholder="Please select a country">
 <Option value="channelMode">按通道</Option>
 <Option value="numberMode">按号码</Option>
 <Option value="areaMode">按区域</Option>
 <Option value="batchMode">按批次</Option>
 </Select>
 )}
 </FormItem>
 <FormItem
 {...formItemLayout}
 label={modelLabel}
 hasFeedback
 >
 {getFieldDecorator('mode', {
 rules: [
 { required: true, message: 'Please select your country!' },
 ],
 })(
 this.state.selectMode !== 'numberMode' ? <Select placeholder="Please select a country">{modelOptions}</Select> : <Input placeholder="请输入电话号码" />
 )}
 </FormItem>
 </Form>
 );
 }
}
const WrappedDemandForm = Form.create()(DemandForm);

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

前端,HTT,计算机与网络

webkit-font-smoothing字体抗锯齿渲染使用案例详解

下载本文
显示全文
专题