项目实战之FORM、联动菜单组件的实现

联动菜单也是我们常用功能之间,下面描述一下联动菜单的一种实现。

一、功能描述:两级联动。

在选择了集群中一项后,会将该集群下的key值都关联出来。开发时在这里遇到一个问题,卡了很久。遇到的问题:在上图的状态下,更换一级联动的值,二级联动的值依然会保留上一次的值。其实这个问题挺简单的。就是在加载二级联动值时先清除。重点还是在对ant的组件不了解,不会使用。

二、功能代码

import React from ‘react‘;
import ‘../index.less‘;
import {Form, Row, Col, Input, Button, Select, Checkbox,message, notification} from ‘antd‘;
import request from ‘../../../utils/request.js‘;

const FormItem = Form.Item;
const Option = Select.Option;
const clusterData = [‘select an option‘, ‘man‘, ‘ware‘];

class HandleCache extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      cacheKeyData: [],
      belongCluster: "",
      cacheContent: "",
    }
  }

  handleClusterChange = (value) => {
    //先清除之前加载的数据
    this.props.form.setFieldsValue({cacheKey: ""});
    const url = `...`;  //访问url
    const hide = message.loading(‘正在查询...‘, 0);
    const obj = {};
    obj.belongCluster = value;
    request.POST(url, obj)
      .then(resp => {
        hide();
        const result = JSON.parse(resp);
        if (result.code === 100) {
          this.setState({
            cacheKeyData: result.data,
          })
        }
      })
      .fail(error => {
        hide();
        ...//失败后的相关处理代码
      })
  }

  handleCacheKeyChange = (value) => {
    const url = `...`;  //访问url
    const hide = message.loading(‘正在查询...‘, 0);
    const obj = {};
    obj.id = value;
    request.POST(url, obj)
      .then(resp => {
        hide();
        const result = JSON.parse(resp);
        if (result.code === 100) {
          this.props.form.setFieldsValue({cacheKey: result.data.cacheKey});
          this.setState({
            belongCluster: result.data.belongCluster,
          })
        }
      })
      .fail(error => {
        hide();
        ...
      })
  }

 render() {
    const {getFieldDecorator} = this.props.form;
    const clusterOptions = clusterData.map(cluster => <Option key={cluster}>{cluster}</Option>);
    const cacheKeyOptions = this.state.cacheKeyData.map(option => <Option key={option.key}>{option.value}</Option>);
    return (
      <div>
        <Form className="ant-advanced-search-form">
          <Row>
            <Col>
              <FormItem
                label="所属集群" labelCol={{span: 4}} wrapperCol={{span: 8}}>
                {getFieldDecorator(‘belongClusters‘, {
                  initialValue: clusterData[0],
                  rules: [{required: true, message: ‘Please select cluster!‘}],
                })(
                  <Select onChange={this.handleClusterChange}>
                    {clusterOptions}
                  </Select>
                )}
              </FormItem>
            </Col>
            <Col>
              <FormItem
                label="key值" labelCol={{span: 4}} wrapperCol={{span: 8}}
              >
                {getFieldDecorator(‘cacheKey‘, {
                  rules: [{required: true, message: ‘Please input cacheKey!‘}],
                })(
                  <Select onChange={this.handleCacheKeyChange}>
                    {cacheKeyOptions}
                  </Select>
                )}
              </FormItem>
            </Col>
          </Row>
        </Form>
      </div>
    );
  }

}
HandleCache = Form.create()(HandleCache);
export default HandleCache;

  三.坑点提示

  1.Select下的Option使用需要定义const Option = Select.Option;

2.一级联动的值少,可以直接在页面中确定,不需要访问后台去获取。实现代码关键:map()方法可循环遍历数组,进行每一项的处理。

const clusterData = [‘select an option‘, ‘man‘, ‘ware‘];
const clusterOptions = clusterData.map(cluster => <Option key={cluster}>{cluster}</Option>);

  3.针对二级联动的值,要动态获取:实现关键代码如下:其中this.state.cacheKeyData是由一级联动触发的访问方法返回的值。

const cacheKeyOptions = this.state.cacheKeyData.map(option => <Option key={option.key}>{option.value}</Option>);

  4.在一种描述的问题可通过this.props.form.setFieldsValue({cacheKey: ""});这个方法先清除值,再加载即可。

时间: 2024-10-12 22:48:23

项目实战之FORM、联动菜单组件的实现的相关文章

项目实战之FORM、复选框组件的实现

一.使用描述 对于复选框组件来说,主要的问题在于,勾选后返回的值要处理为数字,传递给接口,接口返回的值也是数字,但是在前台做回显时在table中数据格式需要转义为文字或者在form中数据格式需要回显在复选框中. 二.功能代码 1,转为数字1为勾选,0为未勾选 constructor(props) { super(props); this.state = { checkStatus: 0 } } //选中是true值转为1,否则就是0 handleIsChecked = (e) => { this

【SSH网上商城项目实战04】EasyUI菜单的实现

上一节我们使用EasyUI搭建了后台页面的框架,这一节我们主要使用EasyUI技术简单实现后台菜单,先将简单功能做出来,后期再继续丰富. 1. 实现左侧菜单 首先看一下效果图: 我们可以点击"基本操作"和"其他操作"来切换菜单选项,在具体的选项内,点击不同的连接,会在右侧显示出来.我们先把左边的菜单做出来. 左侧菜单内容主要有两个:"类别管理"和"商品管理".我们知道,上一节中,在aindex.jsp中应将后台页面的框架搭建好

EXTJS项目实战经验总结一:日期组件的change事件:

1  依据选择的日期,加载相应的列表数据,如图:   开发说明    1 开发思路: 在日期值变化的事件中获得选择后的日期值,传给后台,然后从后台加载相应的数据 2 问题:在查看extjs2.2 的api的官方说明文档,文档对datefield组件的change事件说明如下: change : ( Ext.form.Field this, Mixed newValue, Mixed oldValue )       Fires just before the field blurs if the

CK2020微信小程序入门与实战 常用组件API开发技巧项目实战

新年伊始,学习要趁早,点滴记录,学习就是进步! 随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到程序开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了.对于学习有困难不知道如何提升自己可以加扣:1225462853  获取资料. 下载地址:https://pan.baidu.com/s/1hsU5EIS 微信小程序入门与实战 常用组件API开发技巧项目实战 小程序官方正式公告,开放了更多的入口,个人开发者可以申请

微信小程序入门与实战/常用组件/API/开发技巧/项目实战 共11章

实战开发电影资讯微信小程序 学习之前需要掌握JavaScript和CSS基础 ----------------课程目录---------------- 第1章:什么是微信小程序 开篇及课程特色介绍 直观感受一下微信小程序 小程序适合做什么样的应用 对开发者的影响 学习基础 小作业 第2章:环境搭建与开发工具 开篇介绍及下载工具 小程序目前情况及限制 小程序开发工具介绍 第3章:开始小程序之旅 本章内容简介 官方种子项目介绍与小程序的文件结构 新建我们自己的项目:ReaderMovie 开始制作项

前端全栈架构,组件式开发,响应式开发,全栈工程师架构,用户界面架构,企业级架构项目实战

我本是一名文科专业半路出家的前端开发人员,从最初只会切图和写CSS.Html到现在会写点JS,一路坑坑洼洼,也是经历了很多,从2010年开始就用WordPress开设了自己的博客,虽然内容零零散散的并不多,但是多多少少也留下了时光的缩影,一直希望自己有一个自留地.用Node.js做服务端替换WordPress是去年的一个想法,由于一直腾不出时间,所以拖到了现在.当然了WordPress作为全球用户量最广的开源博客程序,易用性等诸多好处无可厚非,光自己的博客在过去几年就用了很多套模板,也用它做过很

Asp.Net Core 项目实战之权限管理系统(6) 功能管理

0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计 3 Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL 4 Asp.Net Core 项目实战之权限管理系统(4) 依赖注入.仓储.服务的多项目分层实现 5 Asp.Net Core 项目实

Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端

参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/mvc-design-pattern.html http://www.yuanjiaocheng.net/ASPNET-CORE/mvc-routing.html http://www.yuanjiaocheng.net/ASPNET-CORE/attribute-route.html http://www.yuanjiaocheng.net/ASPNET-CORE/core-actionresults

JQuery+Ajax实战三级下拉列表联动(八)

本片文章为练习,项目中不会这样写: 一:涉及到的知识点: jQuery Dom操作 jQuery Ajax操作 ASP.net中的json操作 二:用了自动代码生成器 1.Dal层的代码: public static partial class BranchTwoService { /// <summary> /// 根据一级机构的ID得二级机构列表 /// </summary> /// <param name="branchOneId">1级机构I