热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

react使用antd的在图片列表或表格中实现点击其他元素Checkbox选中功能

antd官网上的Checkbox功能只能单独使用,在表格中加入Checkbox也只能点击Checkbox按钮才能实现选中或取消功能如果我们要实在表格行中点击或在图片列

antd官网上的Checkbox功能只能单独使用,在表格中加入Checkbox也只能点击Checkbox按钮才能实现选中或取消功能

如果我们要实在表格行中点击或在图片列表中点击图片就能实现选中或取消,就需要单独添加事件,然后使用该事件对Checkbox操作的数组进行操作,才能实现该功能,

简单来说就是为需要添加功能的地方再绑定一个事件,与Checkbox操作同一个数据 就可以了

先来看如何实现点击 表格行来选中或取消,这里有一个网上的例子可以贴出来 

https://codesandbox.io/s/000vqw38rl   【作者:doublealoe】

 

 

import React from 'react';
import ReactDOM from
'react-dom';
import
'antd/dist/antd.css';
import
'./index.css';
import { Table } from
'antd';const columns = [{title: 'Name',dataIndex: 'name',render: text => {text},
}, {title: 'Age',dataIndex: 'age',
}, {title:
'Address',dataIndex: 'address',
}];const data
= [{key: '1',name: 'John Brown',age: 32,address: 'New York No. 1 Lake Park',
}, {key:
'2',name: 'Jim Green',age: 42,address: 'London No. 1 Lake Park',
}, {key:
'3',name: 'Joe Black',age: 32,address: 'Sidney No. 1 Lake Park',
}, {key:
'4',name: 'Disabled User',age: 99,address: 'Sidney No. 1 Lake Park',
}];class App extends React.Component {state
&#61; {selectedRowKeys: [],};selectRow &#61; (record) &#61;> {console.log("record---", record);const selectedRowKeys &#61; [...this.state.selectedRowKeys];if (selectedRowKeys.indexOf(record.key) >&#61; 0) {selectedRowKeys.splice(selectedRowKeys.indexOf(record.key), 1);} else {selectedRowKeys.push(record.key);}this.setState({ selectedRowKeys });}onSelectedRowKeysChange &#61; (selectedRowKeys) &#61;> {this.setState({ selectedRowKeys });}render() {const { selectedRowKeys } &#61; this.state;const rowSelection &#61; {selectedRowKeys,onChange: this.onSelectedRowKeysChange,};return (<TablerowSelection&#61;{rowSelection}columns&#61;{columns}dataSource&#61;{data}onRow&#61;{(record) &#61;> ({onClick: () &#61;> {this.selectRow(record);},})}/>
);}
}ReactDOM.render(
, document.getElementById(&#39;container&#39;));

 

 

 

二&#xff0c;实现图片列表选中功能

import React from "react";
import {Modal,Table,Button,Checkbox,Card,Popconfirm } from
&#39;antd&#39;;
import LoadingMixin from
&#39;../../../libs/loading.common.mixin&#39;;
import RequestMixin from
&#39;../../../libs/request.mixin&#39;;
import NotificationMixin from
&#39;../../../libs/notification.mixin&#39;;
import Helper from
&#39;../../../libs/helper&#39;;
import
&#39;./index.css&#39;;const { Meta } &#61; Card;
const CheckboxGroup
&#61; Checkbox.Group;
export
default React.createClass({mixins: [LoadingMixin, NotificationMixin, RequestMixin],propTypes: {onManualClose:React.PropTypes.func,onOk: React.PropTypes.func,onCancel: React.PropTypes.func,title: React.PropTypes.string,item: React.PropTypes.object},getInitialState() {return {item: this.props.item && this.props.item || {},data: [],userObj: {},deleteList:[],indeterminate: false,checkAll: false,checkedList:[]};},componentWillMount() {this.fetch();},fetch() {// console.log("11111111111------------》",this.props.item.frameid);this.post({url: "Api/historyPush/module/frame/key/dac509bd90a82719a3569291e12c24a6f1af4bac",param: {frameid: this.props.item.frameid// frameid:&#39;32frame_tj1&#39;
},noLoading: true}).then(result&#61;> {// console.log("result-----------------",result);this.setState({data: result.result || []});});},hideModal() {this.props.onCancel && this.props.onCancel();},onChange(checkedList){console.log(&#39;checked &#61; &#39;, checkedList);this.setState({checkedList:checkedList,indeterminate: !!checkedList.length && (checkedList.length <this.state.data.length),checkAll: checkedList.length &#61;&#61;&#61; this.state.data.length,});},onclicks(e){const checkedList &#61; [...this.state.checkedList]if (checkedList.indexOf(e) >&#61; 0) {checkedList.splice(checkedList.indexOf(e), 1);} else {checkedList.push(e);}this.setState({ checkedList});},onCheckAllChange(e){// console.log("全选1",e.target.checked);// console.log("全选2",this.state.data);let dataList &#61;[]for(var i&#61;0;i<this.state.data.length;i&#43;&#43;){dataList[i]&#61;this.state.data[i].imgid}// console.log("dataList--------",dataList)this.setState({checkedList: e.target.checked ? dataList : [],indeterminate: false,checkAll: e.target.checked,});},handleClose(record) {var that &#61; this;if (this.state.checkedList&#61;&#61;null||this.state.checkedList.length&#61;&#61;0) {that.error("请选择要删除的图片");return false;};// console.log("删除的图片",this.props.item.frameid,this.state.checkedList);this.post({url: "Api/clearCache/module/frame/key/dac509bd90a82719a3569291e12c24a6f1af4bac",param: {frameid:this.props.item.frameid,imglist: this.state.checkedList},noLoading: true}).then(result&#61;> {if (result.result) {that.success("操作成功");that.fetch();}});},render() {let isMainObj &#61; {1 : "是",0 : "否"}let columns &#61; [{ title: &#39;用户&#39;, dataIndex: &#39;userid&#39;, key: &#39;userid&#39;, width: &#39;20%&#39;,render: (text, record) &#61;> {return (this.state.userObj && this.state.userObj[text])}},{ title: &#39;主管理&#39;, dataIndex: &#39;is_main&#39;, key: &#39;is_main&#39;, width: &#39;20%&#39;,render: (text, record) &#61;> {return (isMainObj[record[&#39;is_main&#39;]])}},{ title: &#39;设备备注&#39;, dataIndex: &#39;remark&#39;, key: &#39;remark&#39;, width: &#39;30%&#39; },{ title: &#39;绑定时间&#39;, dataIndex: &#39;create_time&#39;, key: &#39;create_time&#39;, width: &#39;25%&#39; }];return (this.props.title && this.props.title || &#39;新增&#39;} visible&#61;{true} width&#61;"700px" onCancel&#61;{this.hideModal} maskClosable&#61;{false} footer&#61;{}>

<Checkboxindeterminate&#61;{this.state.indeterminate}onChange&#61;{this.onCheckAllChange}checked&#61;{this.state.checkAll}// checked&#61;{this.state.checked}// disabled&#61;{this.state.disabled}// onChange&#61;{this.onChange} //this,record>{&#39;全选&#39;}this.handleClose} okText&#61;"确定" cancelText&#61;"取消">
this.onChange} value&#61;{this.state.checkedList}>{this.state.data && this.state.data.map((item,index) &#61;> {return (<CheckboxclassName&#61;{&#39;CheckboxStyle&#39;}value&#61;{item.imgid}>this.onclicks.bind(null,item.imgid)} >
)})}
,

)}
});

 

 

主要逻辑

onclicks(e){const checkedList &#61; [...this.state.checkedList]if (checkedList.indexOf(e) >&#61; 0) {checkedList.splice(checkedList.indexOf(e), 1);} else {checkedList.push(e);}this.setState({ checkedList});},

 

转:https://www.cnblogs.com/zhixi/p/10233730.html



推荐阅读
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 基于Node.js、Express、MongoDB和Socket.io的实时聊天应用开发
    本文详细介绍了使用Node.js、Express、MongoDB和Socket.io构建的实时聊天应用程序。涵盖项目结构、技术栈选择及关键依赖项的配置。 ... [详细]
  • 本文将指导如何向ReactJS计算器应用添加必要的功能,使其能够响应用户操作并正确计算数学表达式。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 本文介绍了SVD(奇异值分解)和QR分解的基本原理及其在Python中的实现方法。通过具体代码示例,展示了如何使用这两种矩阵分解技术处理图像数据和计算特征值。 ... [详细]
  • 本文探讨了在React项目中实现子组件向父组件传递数据的方法,包括通过回调函数和使用React状态管理工具。 ... [详细]
  • 本文将详细探讨Linux pinctrl子系统的各个关键数据结构,帮助读者深入了解其内部机制。通过分析这些数据结构及其相互关系,我们将进一步理解pinctrl子系统的工作原理和设计思路。 ... [详细]
  • 配置多VLAN环境下的透明SQUID代理
    本文介绍如何在包含多个VLAN的网络环境中配置SQUID作为透明网关。网络拓扑包括Cisco 3750交换机、PANABIT防火墙和SQUID服务器,所有设备均部署在ESXi虚拟化平台上。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 解决FCKeditor应用主题后上传问题及优化配置
    本文介绍了在Freetextbox收费后选择FCKeditor作为替代方案时遇到的上传问题及其解决方案。通过调整配置文件和调试工具,最终解决了上传失败的问题,并对相关配置进行了优化。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 在本教程中,我们将深入探讨如何使用 Python 构建游戏的主程序模块。通过逐步实现各个关键组件,最终完成一个功能完善的游戏界面。 ... [详细]
  • 基于机器学习的人脸识别系统实现
    本文介绍了一种使用机器学习技术构建人脸识别系统的实践案例。通过结合Python编程语言和深度学习框架,详细展示了从数据预处理到模型训练的完整流程,并提供了代码示例。 ... [详细]
  • 程序员如何优雅应对35岁职业转型?这里有深度解析
    本文探讨了程序员在职业生涯中如何通过不断学习和技能提升,优雅地应对35岁左右的职业转型挑战。我们将深入分析当前热门技术趋势,并提供实用的学习路径。 ... [详细]
  • [Vue.js 3.0] Guide – Scaling Up – State Management
    [Vue.js 3.0] Guide – Scaling Up – State Management ... [详细]
author-avatar
新葡京开户
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有