javascript - 如何修复 reactjs 中类型“JSX.IntrinsicElements”上不存在属性“setConfirmDelete”
问题描述
索引.tsx
const setConfirmDelete = (state, close) => {
return (
<Modal show={state} onHide={close}>
<Modal.Header>
<Modal.Title>Title</Modal.Title>
</Modal.Header>
<Modal.Body>
'This is a body'
</Modal.Body>
<Modal.Footer>
<Button onClick={close} appearance="primary">
Save
</Button>
<Button onClick={close} appearance="subtle">
Cancel
</Button>
</Modal.Footer>
</Modal>
);
}
export default function Users() {
return (
<div>
<gridTable
....
rowFunc={
[name: 'deleteItem',
onClick: () => {
return (<setConfirmDelete state={modal} close={() => setModal(false)} />)
}
]
}>/<gridTable></div>)}
我在这里尝试做的是在单击功能删除时显示模式,我遇到的错误是Property 'setConfirmDelete' does not exist on type 'JSX.IntrinsicElements'
.
我也试过这段代码:
onClick={()=> setConfirmDelete({modal, false})
但它不起作用或显示数据
解决方案
这个特殊的错误“属性 'setConfirmDelete' 在类型 'JSX.IntrinsicElements' 上不存在”是因为 React 假定所有小写元素名称都是内置的,也就是“固有”元素。您的所有组件都必须使用大写名称,例如SetConfirmDelete
.
你不能return
从onClick
. 所有事件处理程序处理函数都是void
并且不应该返回任何东西。您必须改为使用state
.
让我们更改您的modal
状态,以便我们存储模态的内容而不是true
/ false
(显示/隐藏),或者false
如果没有模态。
让我们制作SetConfirmDelete
一个有效的 React 组件,它接受一个close
作为函数的 prop。
import React from "react";
import { Modal, Button } from "react-bootstrap";
interface ModalProps {
close: () => void;
// you'll want this is the future
onSubmit: () => void;
}
const ConfirmDeleteModal: React.FC<ModalProps> = ({ close, onSubmit }) => {
return (
<Modal show={true} onHide={close}>
<Modal.Header>
<Modal.Title>Title</Modal.Title>
</Modal.Header>
<Modal.Body>'This is a body'</Modal.Body>
<Modal.Footer>
<Button onClick={onSubmit} appearance="primary">
Save
</Button>
<Button onClick={close} appearance="subtle">
Cancel
</Button>
</Modal.Footer>
</Modal>
);
};
export default function Users() {
// modal state is either an element or false
const [modal, setModal] = React.useState<React.ReactElement | false>(false);
// helper function for setting modal to false
const close = () => setModal(false);
return (
<div>
<div>
<button
onClick={() =>
setModal(
<ConfirmDeleteModal
close={close}
onSubmit={() => console.log("executing delete")}
/>
)
}
>
Delete
</button>
</div>
{
// when the modal is an element, we display it
modal !== false && modal
}
</div>
);
}
推荐阅读
- python - 如何从字符串中恢复集合?
- java - 减少 JEE 项目的 war 文件大小
- css - SCSS 文件观察程序是否同时写入最小和非缩小文件?
- azure - 如何从多个密钥库中获取密钥?地形
- c# - 删除方法问题 - Asp.net Web API
- reactjs - React useState 批量更新
- angular - 在每个 NgModule 中导入 Angular 组件库模块
- sql - SQL server - 将字符串转换为日期时间
- c# - Amazon.DynamoDBv2.DocumentModel.DynamoDBNull
- azure - Azure:一个虚拟机,两个服务,两个网卡,两个公共 IP