我在 table 行 Click 上编辑了行数据,如何用空形式调用相同的模态?

How to call a same modal with empty form what i have edited row data on a table row Click?

我在 antd table 中获取数据使用 json data.Now 点击 table 行我在 Modal.Now 中获取数据我想单击具有空数据的注册按钮时调用相同的模态?

这是我的 StudentTable 示例数据

 showModal = () => {

        this.setState({
            visible: true,
        });
    }

    onOk = (e) => {
        this.setState({
            visible: false,
        })

    }

    onCancel = (e) => {
        console.log(e);
        this.setState({
            visible: false
        })
    }


    rowClick = (record, rowIndex) => {
        alert("student id...." + record.id)
        alert(JSON.stringify(record))
        this.showModal();
        this.setState({
            StudentData: record
        })


    }

    render() {


        return (

            <div>
                <div align="right">
                <Button type="primary" onClick={this.showModal}>Register</Button>
                </div>
                <h2>Student Data</h2>
                <Table
                    dataSource={data}
                    columns={this.state.columns}
                    pagination={{ pageSize: 5 }}
                    rowKey={record => record.id}
                    onRow={(record, rowIndex) => {
                        return {
                            onClick: (event) => this.rowClick(record, rowIndex)
                        }
                    }}

                />
                <NewModal visible={this.state.visible}
                    onOk={this.onOk}
                    onCancel={this.onCancel}
                    StudentData={this.state.StudentData}
                />


            </div>

        )
    }

我有一个 NewModal。我正在使用 mapPropsValues.Now 在 table rowClick 上获取数据我想用空数据调用相同的模态?如果我单击 table 行调用相同的模态我正在获取数据?现在如何要获得空表格,请使用相同的模式单击“注册”按钮?

我的模态有以下代码?

import React from 'react'
import {
    Modal
} from 'antd'
import FormikApollo from "./FormikForm"

class NewModal extends React.Component {

    state = {

        visible: this.props.visible
    }


    render() {
         const { StudentData} = this.props
         console.log(this.props.StudentData)
        return (

            <Modal
                title="Basic Modal"
                visible={this.props.visible}
                onOk={this.props.onOk}
                onCancel={this.props.onCancel}
                onCreate={this.handleCreate}

            >
                <FormikApollo StudentData={this.props.StudentData}/>
            </Modal>

        )
    }

}

export default NewModal

并且我正在使用带有 antd 的 formik 获取表单数据 component.Now 我想调用相同的模态我点击 table 空表单行点击注册按钮?

<Form onSubmit={handleSubmit}>
                    <Row gutter={4}>
                        <Col span={12} push={5}>
                            <Field
                                name="id"
                                label="StudentID"
                                placeholder="Enter a Id"
                                component={AntInput}                                
                                type="text"                                
                                formitemlayout={formItemLayout}

                            />

                            <Button type="primary" htmlType="submit">Submit</Button>
                        </Col>
                    </Row>

                </Form>

            </div>
        )
    }

}

const FormikApp = (withFormik)({

    mapPropsToValues: ({StudentData}) => ({
        ...(StudentData)
    }),        

    validationSchema: Yup.object().shape({
        username: Yup.string()
            .min(3, "Username must be above 3 characters")
            .required("Username is required"),
        email: Yup.string()
            .email("Invalid Email !!")
            .required("Email is required"),
        password: Yup.string()
            .min(6, "Password must be above 6 characters")
            .required("Password is required"),

        dateofbirth: Yup.string().required("Date is required")



    }),
    handleSubmit(values,{resetForm}) {
        alert(JSON.stringify(values))
        console.log(values)

    }

})(FormikApollo)

如果你想再次渲染 Modal 组件,我建议你在点击按钮时有条件地渲染。

所以你可以有这样的状态

state={showModal: false}state={isSubmitted: false}

然后在你的 jsx 代码中,你将状态设置为与先前状态相反的东西,show/not 显示模态

<button onClick={e => this.setState(prevState => ({showModal: !prevState.showModal}))}>Submit </button>

{this.state.showModal &&
    <Modal {...props} show={this.state.showModal} />
  }

然后你可以将现有的道具传递到你的模式中,或者如果你需要的话可以传递其他道具。然后你传入状态,它控制模态显示或不进入模态。

编辑:

进一步了解问题后,有两种方法可以解决这个问题。

  1. 使用像Redux/Thunk这样的中间件将data/props传输到距离原始组件更远的另一个组件。 https://github.com/reduxjs/redux-thunk

  2. 重新定位你的道具,这样你就可以从多个地方将道具传递给你的模态组件(这需要重构你的架构,因此我建议使用像 redux 这样的东西。