ImagesUpload.jsx
--> Presentational 组件
deleteImageWarning.jsx
--> Notifications 组件
index.js
--> 我在其中导出了 deleteImageWarning 函数
目标
我想在我的 React 应用程序中包含一个通知或弹出窗口,以提醒用户并让他们选择取消或确认操作,在这种情况下,删除附加到作业表的图像。当用户单击位于已附加到页面的图像旁边的删除按钮时,应触发此通知。
在哪里寻找问题
我写的(请看下面)根本不起作用。我觉得这个validateBeforeDelete
功能有问题;我只是想在 DOM 中返回具有正确值的通知函数。此外,我在 deleteImageWarning 组件的 Content 部分缺少要写的内容。
简要概述
为了给您一个想法,按钮的删除功能在处理通知之前工作得非常好。ImagesUpload 文件有一个容器,因此,我们可以声明该ImagesUpload.jsx
文件是展示组件,并且有一个ImagesUploadContainer.jsx
文件充当展示组件的容器组件。
问题
问题是我不知道如何将我在ImagesUpload.jsx
文件中声明的删除函数传递给deleteImageWarning.jsx
组件。这肯定是我在 deleteImageWarning 组件的 Content 常量中所缺少的。它与我的render()
函数中声明的常量有什么关系吗?
图片上传.jsx
//importing the deleteImageWarning function
import {
deleteImageWarning,
} from '../common/notifications';
//this is the function that deletes the image with the required values
async handleDeleteImage (jobsheetId, imageId) {
this.props.deleteImage({jobsheetId: jobsheetId, imageId: imageId});
}
//this is a validate function that is supposed to trigger the deleteImageWarning function
validateBeforeDelete = (jobsheetId, imageId) => {
return deleteImageWarning(this.notificationDOMRef.current, () => this.handleDeleteImage(jobsheetId, imageId));
}
render() {
const { ... } = this.props;
const { ... } = this.state;
return (
//TO BE AWARE! the following delete button with an onClick function has been written using React final form's syntax
...
<StyledSectionColRight>
<Button red type="button" onClick={() => this.validateBeforeDelete(id, image.id)}>Delete</Button>
</StyledSectionColRight>
...
);
}
export default ImagesUpload;
index.js
(没有什么真正重要的,以防万一有人认为错误是由于没有导出 deleteImageWarning)
//deleteImageWarning included in the index.js file
export { default as deleteImageWarning } from './deleteImageWarning';
deleteImageWarning.jsx
import React from 'react';
import styled from 'styled-components';
import { Button, ButtonInverted } from '../button';
const StyledNotification = styled.div`
background: var(--white);
padding: var(--spacer-m);
`;
const StyledMessage = styled.p`
font-size: var(--font-s);
line-height: var(--lineHeight-s);
margin: 0 0 var(--spacer-l) 0;
`;
const Content = ({ ????? }) => (
<StyledNotification>
<StyledMessage>
Are you sure you want to delete this image? This process cannot be undone.
</StyledMessage>
<Button type="button" red onClick={?????}>Confirm</Button>
<ButtonInverted type="button">Cancel</ButtonInverted>
</StyledNotification>
);
const deleteImageWarning = (node, ?????) => {
node.addNotification({
content: <Content ?????={?????} />,
type: "info",
title: "",
message: "",
insert: "top",
container: "top-center",
animationIn: ["animated", "fadeIn"],
animationOut: ["animated", "fadeOut"],
dismissable: { click: true },
width: 400
});
}
export default deleteImageWarning;
为了让它非常明显,我在代码中添加了几个问号来突出显示我不知道该写什么的地方。