React后台管理系统-品类选择器二级联动组件

1.页面大致是这个样子

2.页面结构

  1. <div className="col-md-10">
  2.            <select name="" onChange={(e) => this.onFirstCategoryChange(e)} className="form-control cate-select">
  3.                 <option value="">请选择一级分类</option>
  4.                 {
  5.                  //箭头函数=>右边,加上了{}就需要return,不加就不需要return
  6.                   this.state.firstCategoryList.map(
  7.                       (category, index) => <option value={category.id} key={index}>{category.name}</option>)
  8.                 }
  9.            </select>
  10.            { this.state.secondCategoryList.length ?
  11.            <select name="" onChange={(e) => this.onSecondCategoryChange(e)} className="form-control cate-select">
  12.                 <option value="">请选择二级分类</option>
  13.                 {
  14.                          this.state.secondCategoryList.map(
  15.                              (category, index)=> <option value={category.id} key={index}>{category.name}</option>
  16.                          )
  17.               }
  18.            </select> : null
  19.            }
  20.         </div>

3.定义state里边的数据

  1. this.state = {
  2.            firstCategoryList : [],
  3.            firstCategoryId : 0,
  4.            secondCategoryList : [],
  5.            secondCategoryId : 0,
  6.        }

监听select选择框,当一级品类和二级品类改变的时候, 更新state里边firstCategoryId和secondCategoryId的值

  1. //一级品类改变事件
  2.     onFirstCategoryChange(e){
  3.         //取一级品类的值,没有的话为0
  4.         let newValue=e.target.value || 0;
  5.         this.setState({
  6.  
  7.             firstCategoryId : newValue,
  8.             //当一级品类改变时清空二级品类
  9.             secondCategoryList : [],
  10.             secondCategoryId : 0,
  11.         },() => {
  12.             //加载二级分类
  13.             this.loadSecondCategory()
  14.         })
  15.     }
  16.     //二级品类改变事件
  17.     onSecondCategoryChange(e){
  18.            //取一级品类的值,没有的话为0
  19.            let newValue=e.target.value || 0;
  20.            this.setState({
  21.               secondCategoryId : newValue,
  22.            },() => {
  23.                //加载二级分类
  24.                this.onPropsCategoryChange();
  25.            })
  26.     }

加载一级分类

  1. //加载一级分类
  2.     loadFirstCategory(){
  3.         _product.getCategoryList().then(res => {
  4.             this.setState({
  5.                 firstCategoryList : res
  6.             });
  7.         }, errMsg => {
  8.             _mm.errorTips(errMsg);
  9.         });
  10.     }

加载二级分类

  1. //加载二级分类
  2.    // 加载二级分类
  3.    loadSecondCategory(){
  4.        _product.getCategoryList(this.state.firstCategoryId).then(res => {
  5.            this.setState({
  6.                secondCategoryList : res
  7.            });
  8.        }, errMsg => {
  9.            _mm.errorTips(errMsg);
  10.        });
  11.    }

4.把最新的firstCategoryId和secondCategoryId的值传入父组件,更新父组件里边一级品类和二级品类

  1. // 传给父组件选中的结果
  2.    onPropsCategoryChange(){
  3.        // 判断props里的回调函数存在
  4.        let categoryChangable = typeof
    this.props.onCategoryChange === ‘function‘;
  5.        // 如果是有二级品类
  6.        if(this.state.secondCategoryId){
  7.            categoryChangable && this.props.onCategoryChange(this.state.secondCategoryId, this.state.firstCategoryId);
  8.        }
  9.        // 如果只有一级品类
  10.        else{
  11.            categoryChangable && this.props.onCategoryChange(this.state.firstCategoryId, 0);
  12.        }
  13.    }

父组件使用CategorySelector组件

  1. <div className="form-group">
  2.                        <label className="col-md-2 control-label">所属分类</label>
  3.                        <CategorySelector
  4.                         categoryId={this.state.categoryId}
  5.                         parentCategoryId={this.state.parentCategoryId}
  6.                         onCategoryChange={ (categoryId,parentCategoryId) => this.onCategoryChange(categoryId,parentCategoryId)} />

更新父组件state里边一级品类和二级品类的值

  1. //品类改变事件
  2.    onCategoryChange(categoryId,parentCategoryId){
  3.        this.setState({
  4.            categoryId : categoryId,
  5.            parentCategoryId : parentCategoryId
  6.        });
  7.    }

原文地址:https://www.cnblogs.com/wangyawei/p/9233408.html

时间: 2024-10-14 19:58:25

React后台管理系统-品类选择器二级联动组件的相关文章

React后台管理系统-品类的增加、修改和查看

1.页面 2.品类列表展示 let listBody = this.state.list.map((category, index) => {             return (                 <tr key={index}>                     <td>{category.id}</td>                     <td>{category.name}</td>         

【共享单车】—— React后台管理系统开发手记:项目准备

前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. 一.项目概述       React全家桶 React基础知识.生命周期 Router 4.0 语法讲解 Redux集成开发      AnD UI组件 最实用基础组件 AntD栅格系统 ETable组件封装 BaseForm组件封装 表格内嵌单选.复选封装      公共机制封装 Axios请求

【共享单车】—— React后台管理系统开发手记:主页面架构设计

前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. 一.页面结构定义 左侧导航栏,右侧页面结构 右侧显示内容分别分为上Header.中Content和下Footer部分 二.目录结构定义 src->admin.js:项目主结构代码(index.js中替换App.js挂载到根节点) src->common.js:项目公共结构代码(类似admin.j

React后台管理系统-file-uploader组件

1.React文件上传组件github地址: https://github.com/SoAanyip/React-FileUpload 2.Util里边新建file-uploader文件夹,里边新建index.jsx import React from 'react'; import FileUpload from './react-fileupload.jsx';   class FileUploader extends React.Component{     render(){      

React后台管理系统-rich-editor组件

1.Simditor组件的github地址:https://github.com/mycolorway/simditor 网址:http://simditor.tower.im/ 2.在util里边新建rich-editor文件夹,里边新建index.jsx import React from 'react'; import Simditor from 'simditor'; import 'simditor/styles/simditor.scss'; import './index.scss

【共享单车】—— React后台管理系统开发手记:UI菜单各个组件使用(Andt UI组件)

前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. 一.按钮Button pages->ui->button.js:对应路由/admin/ui/buttons import React from 'react'; import {Card, Button, Radio} from 'antd' import './ui.less' class B

【共享单车】—— React后台管理系统开发手记:AntD Form基础组件

前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. 一.使用Form组件开发登录页面 pages->form->login.js:对应路由/admin/form/login import React from 'react' import {Card, Form, Input, Button, message, Icon, Checkbox} f

【共享单车】—— React后台管理系统开发手记:城市管理和订单管理

前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. 一.城市管理 pages->city->index.js:对应路由/admin/city 顶部子组件一:选择表单 class FilterForm extends React.Component{ render(){ const { getFieldDecorator } = this.prop

【共享单车】—— React后台管理系统开发手记:Router 4.0路由实战演练

前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. 一.React Router 4.0核心概念 4.0版本中已不需要路由配置,一切皆组件 react-router:基础路由包 提供了一些router的核心api,包括Router,Route,Switch等 react-router-dom:基于浏览器的路由(包含react-router) 提供了