reactjs - 通过 React-Toastify 通知传递变量
问题描述
目前正在开发一个使用 React 作为前端的应用程序。目前,存在可以在订单项容器中引用的参数。我想要做的是,当尝试删除参数时,屏幕上会弹出一个使用 Toastify 的通知,如果他们确定要删除参数,将提示用户单击“是”。
当前设置代码的方式,参数有一个与之相关的值,因此程序知道要删除哪个参数。我在尝试通过 Toastify 通知传递值时遇到问题,因此删除参数的函数调用通过该通知接收值。
这是整个代码,与 Toastify 相关的部分在第 30-47 行和第 89-95 行
import { Button, Input, Modal, Table } from 'antd';
import { Values } from '../App';
import '../App.css';
import CollectionCreateForm from "./CollectionCreateForm";
import { toast } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css';
toast.configure()
// interface for parameters sent to component
interface ParameterEditProps {
visible: boolean; // if component can be seen
visibleCCF: boolean;
setVisible: (a:boolean)=> void;
onCreate: (values:Values)=> void;
editingKey: string;
cancelEdit: () => void; // cancel editing
parameters: Values[]; // parameters in state
updateParameters: (updatedParams: Values[], removedParams: Values[]) => void; // update and remove parameters
}
// component for editing and removing parameters
const ParameterEdit: React.FC<ParameterEditProps> = ({visible, cancelEdit, parameters, updateParameters, setVisible, visibleCCF, onCreate, editingKey}) => {
const [removedValues, setRemovedValues] = useState<Values[]>([]);
const [paramData, setParamData] = useState<Values[]>([]);
interface Props {
_: any
closeToast: any
parameter: Values
}
const DeleteWarning: React.FC<Props> = ({_, closeToast, parameter}) => {
return (
<div>
Are you sure you wish to delete this parameter? It may be currently used in a formula?
<Button type="link" onClick={() => {closeToast(); removeParam(parameter)}}>Yes</Button>
</div>
);
}
const notify = (parameter: Values) => {
toast.warn(DeleteWarning, {position: toast.POSITION.TOP_CENTER})
}
// deep copy of parameters so they are not updated even if canceled
useEffect(() => {
setParamData(JSON.parse(JSON.stringify(parameters)));
}, [parameters])
// update parameter values from user input
const inputChange = (index: number, key: string) => (e: any) => {
const newData = [...paramData]
if (key === 'value') {
newData[index].value = e.target.value;
}
else {
newData[index].name = e.target.value;
}
setParamData(newData);
}
// remove value and add it to removed state
const removeParam = (value: Values) => {
setRemovedValues(removedValues.concat(value));
setParamData(paramData.filter(a => a.id !== value.id));
}
const columns = [
{
title: "Name",
dataIndex: "name",
render: (name: string, record: Values, index: number) => (<Input value={name} onChange={inputChange(index, "name")}/>)
},
{
title: "Value",
dataIndex: "value",
render: (value: number, record: Values, index: number) => (<Input value={value} onChange={inputChange(index, "value")}/>)
},
{
title: "Action",
dataIndex: "action",
width: "10%",
render: (_: any, parameter: Values) => {
return (
<span>
<Button onClick={() => notify(parameter)}>Delete</Button>
</span>
);
}
}
];
return (
<>
<Modal
visible={visible}
title="Edit Parameters"
onCancel={cancelEdit}
footer={[
<Button
disabled={editingKey !== ''}
onClick={() => {
setVisible(true);
}}
>
Add Parameter
</Button>,
<Button type="primary" onClick={() => updateParameters(paramData, removedValues)}>
Save
</Button>
]}
>
<Table
bordered
columns={columns}
dataSource={paramData}
/>
</Modal>
<CollectionCreateForm
visible={visibleCCF}
onCreate={onCreate}
onCancel={() => {
setVisible(false);
}}
/>
</>
)
}
export default ParameterEdit;
解决方案
推荐阅读
- vue.js - 将关键事件添加到 v-for 的最后一项
- c++ - 获得通过 'const std::map
' as 'this' 参数丢弃 lambda 函数中的限定符 [-fpermissive] - swift - Swiftui函数更改变量
- javascript - TypeScript 泛型和联合函数类型
- excel - Excel VBA - 查找功能的类型不匹配
- servicestack - ServiceStack.Redis WaitBeforeForcingMasterFailover
- ruby-on-rails - 如果不是管理员,则尝试将用户重定向到 root_path
- android - 当请求中的 nodeId 与数据库中的 nodeId 匹配时,我可以将 Firebase 实时数据库规则设置为只读吗
- classification - 如果您想关注二元分类中正类和负类的性能,应该查看哪个性能指标?
- c# - asp.net:在gridview 或listview 或其他数据控件中显示数据?