React后台管理系统-品类选择器二级联动组件
1.页面大致是这个样子

2.页面结构
- <div className="col-md-10">
- <select name="" onChange={(e) => this.onFirstCategoryChange(e)} className="form-control cate-select">
- <option value="">请选择一级分类</option>
- {
- //箭头函数=>右边,加上了{}就需要return,不加就不需要return
- this.state.firstCategoryList.map(
- (category, index) => <option value={category.id} key={index}>{category.name}</option>)
- }
- </select>
- { this.state.secondCategoryList.length ?
- <select name="" onChange={(e) => this.onSecondCategoryChange(e)} className="form-control cate-select">
- <option value="">请选择二级分类</option>
- {
- this.state.secondCategoryList.map(
- (category, index)=> <option value={category.id} key={index}>{category.name}</option>
- )
- }
- </select> : null
- }
- </div>
3.定义state里边的数据
- this.state = {
- firstCategoryList : [],
- firstCategoryId : 0,
- secondCategoryList : [],
- secondCategoryId : 0,
- }
监听select选择框,当一级品类和二级品类改变的时候, 更新state里边firstCategoryId和secondCategoryId的值
- //一级品类改变事件
- onFirstCategoryChange(e){
- //取一级品类的值,没有的话为0
- let newValue=e.target.value || 0;
- this.setState({
- firstCategoryId : newValue,
- //当一级品类改变时清空二级品类
- secondCategoryList : [],
- secondCategoryId : 0,
- },() => {
- //加载二级分类
- this.loadSecondCategory()
- })
- }
- //二级品类改变事件
- onSecondCategoryChange(e){
- //取一级品类的值,没有的话为0
- let newValue=e.target.value || 0;
- this.setState({
- secondCategoryId : newValue,
- },() => {
- //加载二级分类
- this.onPropsCategoryChange();
- })
- }
加载一级分类
- //加载一级分类
- loadFirstCategory(){
- _product.getCategoryList().then(res => {
- this.setState({
- firstCategoryList : res
- });
- }, errMsg => {
- _mm.errorTips(errMsg);
- });
- }
加载二级分类
- //加载二级分类
- // 加载二级分类
- loadSecondCategory(){
- _product.getCategoryList(this.state.firstCategoryId).then(res => {
- this.setState({
- secondCategoryList : res
- });
- }, errMsg => {
- _mm.errorTips(errMsg);
- });
- }
4.把最新的firstCategoryId和secondCategoryId的值传入父组件,更新父组件里边一级品类和二级品类
- // 传给父组件选中的结果
- onPropsCategoryChange(){
- // 判断props里的回调函数存在
- let categoryChangable = typeof this.props.onCategoryChange === 'function';
- // 如果是有二级品类
- if(this.state.secondCategoryId){
- categoryChangable && this.props.onCategoryChange(this.state.secondCategoryId, this.state.firstCategoryId);
- }
- // 如果只有一级品类
- else{
- categoryChangable && this.props.onCategoryChange(this.state.firstCategoryId, 0);
- }
- }
父组件使用CategorySelector组件
- <div className="form-group">
- <label className="col-md-2 control-label">所属分类</label>
- <CategorySelector
- categoryId={this.state.categoryId}
- parentCategoryId={this.state.parentCategoryId}
- onCategoryChange={ (categoryId,parentCategoryId) => this.onCategoryChange(categoryId,parentCategoryId)} />
更新父组件state里边一级品类和二级品类的值
- //品类改变事件
- onCategoryChange(categoryId,parentCategoryId){
- this.setState({
- categoryId : categoryId,
- parentCategoryId : parentCategoryId
- });
- }
React后台管理系统-品类选择器二级联动组件的更多相关文章
- React后台管理系统-品类的增加、修改和查看
1.页面 2.品类列表展示 let listBody = this.state.list.map((category, index) => { return ( ...
- React后台管理系统-添加商品组件
引入了CategorySelector 二级联动组件.FileUploader图片上传组件和RichEditor富文本编辑组件 import React from 'react'; import MU ...
- 《React后台管理系统实战 :一》:目录结构、引入antd、引入路由、写login页面、使用antd的form登录组件、form前台验证、高阶函数/组件
实战 上接,笔记:https://blog.csdn.net/u010132177/article/details/104150177 https://gitee.com/pasaulis/react ...
- react后台管理系统路由方案及react-router原理解析
最近做了一个后台管理系统主体框架是基于React进行开发的,因此系统的路由管理,选用了react-router(4.3.1)插件进行路由页面的管理配置. 实现原理剖析 1.hash的方式 ...
- 【共享单车】—— React后台管理系统开发手记:主页面架构设计
前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...
- Vue + Element-ui实现后台管理系统(4)---封装一个ECharts组件的一点思路
封装一个ECharts组件的一点思路 有关后台管理系统之前写过三遍博客,看这篇之前最好先看下这三篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-system ...
- 《React后台管理系统实战 :二》antd左导航:cmd批量创建子/目录、用antd进行页面布局、分离左导航为单独组件、子路由、动态写左导航、css样式相对陷阱
一.admin页面布局及路由创建 0)cmd批量创建目录及子目录 //创建各个目录,及charts和子目录bar md home category product role user charts\b ...
- 《React后台管理系统实战 :三》header组件:页面排版、天气请求接口及页面调用、时间格式化及使用定时器、退出函数
一.布局及排版 1.布局src/pages/admin/header/index.jsx import React,{Component} from 'react' import './header. ...
- 【共享单车】—— React后台管理系统开发手记:UI菜单各个组件使用(Andt UI组件)
前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...
随机推荐
- Linux网卡操作
单个网卡操作 [root@localhost ~]# ifdown eth0 #关闭网络 [root@localhost ~]# ifup eth0 #启动网络 网络服务: [root@localho ...
- pat06-图7. How Long Does It Take (25)
06-图7. How Long Does It Take (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue ...
- Unicode汉字编码表以及参考源码分享
1 Unicode编码表 Unicode只有一个字符集,中.日.韩的三种文字占用了Unicode中0x3000到0x9FFF的部分 Unicode目前普遍采用的是UCS-2,它用两个字节来编码一个 ...
- gdb调试汇总
1. 启动GDB开始调试: (1)gdb program ///最常用的用gdb启动程序,开始调试的方式(2)gdb program core ///用gdb查看core dump文件,跟踪程序cor ...
- 零度4W1H提问规则
WHAT:您现在的需求和目的是什么,请按条理描述清楚. WHERE:在什么平台.环境和工具下发生此问题. WHEN:何时发生的该问题,该问题是否能够重现. WHY:为什么不能通过搜索引擎来解决您的问题 ...
- 对fastdfs 文件清单进行检查,打印无效的文件
对fastdfs 文件清单进行检查,打印无效的文件2017年12月12日 18:37:18 守望dfdfdf 阅读数:281 标签: fastdfssftpmysql 更多个人分类: 工作 问题编辑版 ...
- intellijidea课程 intellijidea神器使用技巧 5-2 localhistory
Ctrl shift A ==>localhistory ==> show history 查看文件本地历史记录(idea每次修改在本地会生成历史记录) Ctrl shift A == ...
- Java之美[从菜鸟到高手演变]之智力题【史上最全】 (转)
原文地址:http://blog.csdn.net/zhangerqing/article/details/8138296 PS:在一次偶然的机会中,发现了这篇文章.希望大家能开动脑经. 智力题,每个 ...
- Objective-C #define 用法解析 (转)
原文地址: http://blog.csdn.net/kindazrael/article/details/8108868 Objective-C : #define 用法解析 在 C 语言中,预处理 ...
- 从0到1构建适配不同端(微信小程序、H5、React-Native 等)的taro + dva应用
从0到1构建适配不同端(微信小程序.H5.React-Native 等)的taro + dva应用 写在前面 Taro 是一套遵循 React 语法规范的 多端开发 解决方案.现如今市面上端的形态多种 ...