加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 20:36:54 所属栏目:百科 来源:网络整理
导读:antd官网上的Checkbox功能只能单独使用,在表格中加入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 => <a href="#">{text}</a>,},{
  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‘,address: ‘Sidney No. 1 Lake Park‘,{
  key: ‘4‘,name: ‘Disabled User‘,age: 99,}];

class App extends React.Component {
  state = {
    selectedRowKeys: [],};
  selectRow = (record) => {
    console.log("record---",record);
    const selectedRowKeys = [...this.state.selectedRowKeys];
    if (selectedRowKeys.indexOf(record.key) >= 0) {
      selectedRowKeys.splice(selectedRowKeys.indexOf(record.key),1);
    } else {
      selectedRowKeys.push(record.key);
    }
    this.setState({ selectedRowKeys });
  }
  onSelectedRowKeysChange = (selectedRowKeys) => {
    this.setState({ selectedRowKeys });
  }
  render() {
    const { selectedRowKeys } = this.state;
    const rowSelection = {
      selectedRowKeys,onChange: this.onSelectedRowKeysChange,};
    return (
      <Table
        rowSelection={rowSelection}
        columns={columns}
        dataSource={data}
        onRow={(record) => ({
          onClick: () => {
            this.selectRow(record);
          },})}
      />
    );
  }
}

ReactDOM.render(<App />,document.getElementById(‘container‘));
          

?

?

?

二,实现图片列表选中功能

import React from "react";
import {Modal,Table,Button,Checkbox,Card,Popconfirm } from ‘antd‘;
import LoadingMixin from ‘../../../libs/loading.common.mixin‘;
import RequestMixin from ‘../../../libs/request.mixin‘;
import NotificationMixin from ‘../../../libs/notification.mixin‘;
import Helper from ‘../../../libs/helper‘;
import ‘./index.css‘;

const { Meta } = Card;
const CheckboxGroup = 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("22222222221------------》",this.props.item.frameid);
        this.post({
            url: "Api/historyPush/module/frame/key/dac509bd90a82719a3569291e12c24a6f1af4bac",param: {
                frameid: this.props.item.frameid
                // frameid:‘32frame_tj1‘
            },noLoading: true
        }).then(result=> {
            // console.log("result-----------------",result);
            this.setState({data: result.result || []});
        });
    },hideModal() {
        this.props.onCancel && this.props.onCancel();
    },onChange(checkedList){
        console.log(‘checked = ‘,checkedList);
        this.setState({
            checkedList:checkedList,indeterminate: !!checkedList.length && (checkedList.length < this.state.data.length),checkAll: checkedList.length === this.state.data.length,});

    },onclicks(e){
        const checkedList = [...this.state.checkedList]
        if (checkedList.indexOf(e) >= 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 =[]
        for(var i=0;i<this.state.data.length;i++){
            dataList[i]=this.state.data[i].imgid
        }
        // console.log("dataList--------",dataList)
        this.setState({
            checkedList: e.target.checked ? dataList : [],checkAll: e.target.checked,});
    },handleClose(record) {
        var that = this;
        if (this.state.checkedList==null||this.state.checkedList.length==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=> {
            if (result.result) {
                that.success("操作成功");
                that.fetch();
            }
        });
    },render() {
        let isMainObj = {
            1 : "是",0 : "否"
        }
        let columns = [
            { title: ‘用户‘,dataIndex: ‘userid‘,key: ‘userid‘,width: ‘20%‘,render: (text,record) => {
                    return (
                        this.state.userObj && this.state.userObj[text]
                    )
                }
            },{ title: ‘主管理‘,dataIndex: ‘is_main‘,key: ‘is_main‘,record) => {
                    return (
                        isMainObj[record[‘is_main‘]]
                    )
                }
            },{ title: ‘设备备注‘,dataIndex: ‘remark‘,key: ‘remark‘,width: ‘30%‘ },{ title: ‘绑定时间‘,dataIndex: ‘create_time‘,key: ‘create_time‘,width: ‘25%‘ }
        ];
        return (
            <Modal title={this.props.title && this.props.title || ‘新增‘} visible={true}  width="700px" onCancel={this.hideModal}  maskClosable={false} footer={
                <Button key="back" type="ghost" size="large" onClick={this.hideModal}>关&nbsp;&nbsp;闭</Button>
            }>
                <div className={‘boxTitle‘}>
                    <Checkbox
                        indeterminate={this.state.indeterminate}
                        onChange={this.onCheckAllChange}
                        checked={this.state.checkAll}
                        // checked={this.state.checked}
                        // disabled={this.state.disabled}
                        // onChange={this.onChange} //this,record
                    >
                        {‘全选‘}
                    </Checkbox>
                    <Popconfirm placement="topRight" title={"您确定要删除这些数据吗?"} onConfirm={this.handleClose} okText="确定" cancelText="取消">
                        <Button type="primary">批量删除</Button>
                    </Popconfirm>
                </div>
                <div className={‘cardBox‘}>
                    <Checkbox.Group style={{ width: ‘100%‘ }} onChange={this.onChange}  value={this.state.checkedList}>
                    <Card title="" >
                        {
                            this.state.data && this.state.data.map((item,index) => {
                                return (
                                <Card.Grid className={‘gridStyle‘} key={item.imgid} >
                                    <Checkbox
                                        className={‘CheckboxStyle‘}
                                        value={item.imgid}
                                    >
                                    </Checkbox>
                                    <img  src={item.small_url} onClick={this.onclicks.bind(null,item.imgid)} ></img>
                                </Card.Grid>
                                )
                            })
                        }
                    </Card>
                    </Checkbox.Group>,</div>
            </Modal>
        )
    }
});

?

?

主要逻辑

    onclicks(e){
        const checkedList = [...this.state.checkedList]
        if (checkedList.indexOf(e) >= 0) {
            checkedList.splice(checkedList.indexOf(e),

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读