繁体   English   中英

React - 如何在我的情况下调用弹出窗口?

[英]React - how to invoke popup window in my case?

我还不是 React 专家,因此我有一个问题要问您 - 如何从以下位置调用我的弹出窗口:

import {options, columns,convertToArray} from './consts'

    const index = () => {

        const {data, loading, error, performFetch} = fetchHook({path: "/xxx/yyy", fetchOnMount: true})

        return (
            <div className={classes.Container}>
                <h1>List of products</h1>
                <Divider className={classes.Divider} />
                <ProductTable data={convertToArray(data)} options={options} columns={columns}/>
            </div>
        )
    }

    export default index;

常量.js

export const actions = (productPropertyId, showModal) => {
    const productDetails = (productPropertyId) => {
    }

    const removeProduct = (productPropertyId, showModal) => {
    actions(productPropertyId, showModal);

    return (
        <div className={classes.actionsContainer}>
            <Button
                onClick={() => productDetails(productPropertyId)}
            > {"More"}
            </Button>
            <Button
                const removeProduct = (productPropertyId, showModal) => {
    actions(productPropertyId, showModal);
            >{"Remove"}
            </Button>
        </div>
    )
};


export const convertToArray = (productList) => {
    let products = []
    if (productList != null) {
        productList.map(product => {
           column1, column2, column3, actions(product.id)]
            products.push(prod)
        })
    }
    return products;
};

我的弹出窗口是 --> <FormDialog/>基于反应材料。

可以在这个地方调用弹出窗口吗?

我有一个包含一些列的反应材料表。 最后一列包含 2 个按钮,其中一个是“删除”(行)。 在这里我想调用我的弹出窗口。 也许我应该重建我的结构?

更新

下面是我的弹出窗口 - 我想知道如何从上面的地方运行这个弹出窗口:

const formDialog = (popupOpen) => {
    const [open, setOpen] = React.useState(false);

    const handleClickOpen = () => {
        setOpen(true);
    };

    const handleClose = () => {
        setOpen(false);
    };

    return (
        <div>
            {/*<Button variant="outlined" color="primary" onClick={handleClickOpen}>*/}
            {/*    Open alert dialog*/}
            {/*</Button>*/}
            <Dialog open={open} onClose={handleClose} aria-labelledby="form-dialog-title">
                <DialogTitle id="form-dialog-title">Subscribe</DialogTitle>
                <DialogContent>
                    <DialogContentText>
                        To subscribe to this website, please enter your email address here. We will send updates
                        occasionally.
                    </DialogContentText>
                    <TextField
                        autoFocus
                        margin="dense"
                        id="name"
                        label="Email Address"
                        type="email"
                        fullWidth
                    />
                </DialogContent>
                <DialogActions>
                    <Button onClick={handleClose} color="primary">
                        Cancel
                    </Button>
                    <Button onClick={handleClose} color="primary">
                        Subscribe
                    </Button>
                </DialogActions>
            </Dialog>
        </div>
    );
}

export default formDialog;

更新 2

我更新了我的代码,考虑到您回复中的提示,见上文。 我可以在export const actions = (productPropertyId, showModal)添加参数 showModal 然后使用不同的 showModal 值调用此组件吗? 不幸的是,当我点击删除按钮时,我的弹出窗口没有出现:(

您可以有条件地调用它并使用一些状态变量来控制它。 像这样:

const [removeModal, removeToggle] = useState(false);
return (<>
<div className={classes.actionsContainer}>
            <Button
                onClick={() => productDetails(productPropertyId)}
            > {"More"}
            </Button>
            <Button
                onClick={() => removeToggle(true)}
            >{"Remove"}
            </Button>
        </div>
{removeModal ? <YourComponent /> : ''}
</>
)

我在那里使用一个反应片段<></>只是为了将模态 div 定位在主 div 之外,但您也可以在主 div 内调用它(我通常这样做并设置position: fixed所以模态/popup 可以出现在所有内容的顶部)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM