如何在 AntD Reactjs 中打开表格行按钮上的模态并访问模态中的表格数据

Ras*_*siG 4 modal-dialog button reactjs antd

我在 antd 表中显示用户数据,并在表中为每行创建了编辑按钮来访问每行记录。我想在“编辑”按钮单击时打开模态并在模态中获取相应的行数据。但无法,因为它给出了错误:

“showModal”未定义

版本:

  • "antd": "^4.18.9",
  • "axios": "^0.26.0",
  • “反应”:“^17.0.2”,
  • "react-dom": "^17.0.2",
  • "react-router-dom": "^6.2.2"

我的数据来自 - https://jsonplaceholder.typicode.com/users

下面是我的代码

import React , {useState , useEffect } from 'react'
import Layout, { Header, Content, Footer } from 'antd/lib/layout/layout';
import { Table, Row, Col } from 'antd';
import axios from 'axios';
import 'antd/dist/antd.css';
import { Modal, Button } from 'antd';
import Example from './NewUserForm';


const columns =[
    
    {
        title:'Name',
        dataIndex:'name',
        key:'uname'

    },
    {
        title:'Email',
        dataIndex:'emailss',
        key:'uemail'

    },
    {
        title:'Address',
        dataIndex:'address',
        key:'uaddress'

    },
    {
        title:'Edit User',
        dataIndex:'edit',
        key:'uedit',
        render: (record) =>( <Button type="primary" 
        onClick={showModal}>
            Edit</Button>)
            
    },

];


const UsersList = () =>{
    const [data, setdata] = useState([])

    useEffect(() => {
        getData() }
    , [])

    const getData = async () =>{
        const res = await axios.get(`https://jsonplaceholder.typicode.com/users`)
        
        setdata(  res.data.map(row =>({id:row.id,name:row.name,emailss:row.email,address:row.address.city})) );              
    }

    const [isModalVisible, setIsModalVisible] = useState(false);

    const showModal = () => {
    setIsModalVisible(true);
    };

    const handleOk = () => {
    setIsModalVisible(false);
    };

    const handleCancel = () => {
    setIsModalVisible(false);
    };

    return (
       
        <Layout>
            <Header>Header 1</Header>          
                <Content  style={{padding:50}}>
                    <Row>
                        <Col span={3}/>
                        <Col span={18}>
                            <Table dataSource={data} columns={columns} />
                        </Col>
                        <Col span={3}/>
                    </Row>
                </Content> 
                <Modal title="Basic Modal" visible={isModalVisible} onOk={handleOk} onCancel={handleCancel}>
                    <p>Some contents...</p>
                    <p>Some contents...</p>
                    <p>Some contents...</p>
                </Modal>           
           <Footer></Footer> 
        </Layout>
        
        );
        
}

export default UsersList; ```
        
 
Run Code Online (Sandbox Code Playgroud)

Ved*_*Ved 6

移动您的column内部Userlist函数,以修复“showModal”未定义错误

import React , {useState , useEffect } from 'react'
import Layout, { Header, Content, Footer } from 'antd/lib/layout/layout';
import { Table, Row, Col } from 'antd';
import axios from 'axios';
import 'antd/dist/antd.css';
import { Modal, Button } from 'antd';
import Example from './NewUserForm';

const UsersList = () =>{
    const [data, setdata] = useState([])
    
    const columns =[       
    {
        title:'Name',
        dataIndex:'name',
        key:'uname'

    },
    {
        title:'Email',
        dataIndex:'emailss',
        key:'uemail'

    },
    {
        title:'Address',
        dataIndex:'address',
        key:'uaddress'

    },
    {
        title:'Edit User',
        dataIndex:'edit',
        key:'uedit',
        render: (record) =>( <Button type="primary" 
        onClick={showModal}>
            Edit</Button>)
            
    },

];

    useEffect(() => {
        getData() }
    , [])

    const getData = async () =>{
        const res = await axios.get(`https://jsonplaceholder.typicode.com/users`)
        
        setdata(  res.data.map(row =>({id:row.id,name:row.name,emailss:row.email,address:row.address.city})) );              
    }

    const [isModalVisible, setIsModalVisible] = useState(false);

    const showModal = () => {
    setIsModalVisible(true);
    };

    const handleOk = () => {
    setIsModalVisible(false);
    };

    const handleCancel = () => {
    setIsModalVisible(false);
    };

    return (
       
        <Layout>
            <Header>Header 1</Header>          
                <Content  style={{padding:50}}>
                    <Row>
                        <Col span={3}/>
                        <Col span={18}>
                            <Table dataSource={data} columns={columns} />
                        </Col>
                        <Col span={3}/>
                    </Row>
                </Content> 
                <Modal title="Basic Modal" visible={isModalVisible} onOk={handleOk} onCancel={handleCancel}>
                    <p>Some contents...</p>
                    <p>Some contents...</p>
                    <p>Some contents...</p>
                </Modal>           
           <Footer></Footer> 
        </Layout>
        
        );
        
}

export default UsersList;
Run Code Online (Sandbox Code Playgroud)

要在模式中显示数据,请检查以下代码

用户列表.js

import React , {useState , useEffect } from 'react'
import Layout, { Header, Content, Footer } from 'antd/lib/layout/layout';
import { Table, Row, Col } from 'antd';
import axios from 'axios';
import 'antd/dist/antd.css';
import { Modal, Button } from 'antd';
import Example from './NewUserForm';

const UsersList = () =>{
  const [data, setdata] = useState([]);
  const [modaldata, setmodaldata] = useState([]);

  const columns = [
    {
      title: 'Name',
      dataIndex: 'name',
      key: 'uname',
    },
    {
      title: 'Email',
      dataIndex: 'emailss',
      key: 'uemail',
    },
    {
      title: 'Address',
      dataIndex: 'address',
      key: 'uaddress',
    },
    {
      title: 'Edit User',
      dataIndex: 'id',
      key: 'id',
      render: (index, record) => (
        <Button type="primary" onClick={() => showModal(record)}>
          Edit
        </Button>
      ),
    },
  ];

  useEffect(() => {
    getData();
  }, []);

  const getData = async () => {
    const res = await axios.get(`https://jsonplaceholder.typicode.com/users`);
    setdata(
      res.data.map((row) => ({
        id: row.id,
        name: row.name,
        emailss: row.email,
        address: row.address.city,
      }))
    );
  };

  const [isModalVisible, setIsModalVisible] = useState(false);

  const showModal = (record) => {
    console.log(record);
    setmodaldata(record);
    setIsModalVisible(true);
  };

  const handleOk = () => {
    setIsModalVisible(false);
  };

  const handleCancel = () => {
    setIsModalVisible(false);
  };

  return (
    <Layout>
      <Header>Header 1</Header>
      <Content style={{ padding: 50 }}>
        <Row>
          <Col span={3} />
          <Col span={18}>
            <Table dataSource={data} columns={columns} />
          </Col>
          <Col span={3} />
        </Row>
      </Content>
      <Modal
        title="Basic Modal"
        visible={isModalVisible}
        onOk={handleOk}
        onCancel={handleCancel}
      >
        <p>Name: {modaldata.name}</p>
        <p>Email: {modaldata.emailss}</p>
        <p>Address: {modaldata.address}</p>
      </Modal>
      <Footer></Footer>
    </Layout>
  );
};

export default UsersList;
Run Code Online (Sandbox Code Playgroud)

截屏