javascript - 错误:无法将 undefined 或 null 转换为对象
问题描述
我使用fetch
并获取响应 - 类别列表向服务器发出请求。这个列表我显示在视图表中。在右侧的每个类别附近,我都有按钮Delete。当我单击此按钮时,会出现带有两个按钮Delete
和Cancel
. DELETE
我使用了删除某些类别的API 方法。
当我单击Delete
模式窗口中的按钮时
我的分类删除!很好!
但在我的页面出现错误:
TypeError:无法将 undefined 或 null 转换为对象
为什么会这样?以及如何解决?
在我看来,这个错误可能是因为我写错了方法deleteCategory
主页.js:
const Home = () => {
const [value, setValue] = useState({
/.....
listCategory: [],
numberIdDelete: "",
isOpenedDelete: false
});
const deleteCategory = (argDeleteCategory) => { // in this method id some category set as value in field - numberIdDelete
setValue({ // that is, I'll know on which category the user has clicked delete button
...value,
numberIdDelete: argDeleteCategory, // this id I put in path in component DeleteCategory
isOpenedDelete: true
});
};
const cancel = () => { // close modal window
setValue({
...value,
isOpenedDelete: false
});
};
return (
<div>
<Table dataAttribute={value.listCategory}
deleteCategory={deleteCategory}/> // in component Table located button Delete
{value.isOpenedDelete && <DeleteCategory value={value.numberIdDelete} cancel={cancel} />}
</div>
);
};
删除类别.js:
const DeleteCategory = (props) => {
const {handleSubmit} = useFormik({
onSubmit: async () => {
const response = await fetch(`pathToServer/${props.value}`, { // put value from state (id some category)
method:'DELETE',
headers: {/.....}
});
const data = await response.json();
}});
return (
<div >
<form onSubmit={handleSubmit}>
<button type="submit" onClick={() => props.delCategory}>Delete</button>
<button type="submit" onClick={() => props.cancel}>Cancel</button>
</form>
</div>
);
};
表.js:
export default (props) => (
<table>
<thead>
<tr>
<th>ID</th>
<th>TITLE</th>
</tr>
</thead>
<tbody>
{props.dataAttribute.map(item => (
<tr key={item.id}>
<td>{item.id} </td>
<td>{item.title} </td>
<td><button onClick={() => props.deleteCategory(item.id)}>Delete</button></td> // Button Delete
</tr>
))}
</tbody>
</table>
);
解决方案
问题在于你打电话的方式useFormik
。您配置它的方式,没有与之关联的输入字段。
这会导致当您单击删除按钮时执行提交并useFormik
尝试使用输入值构建一个对象以将其传递给onSubmit
prop。但是没有输入。
检查您的DeleteCategory
组件代码,您不需要使用useFormik
. 毕竟,您只是显示确认模式。相反,您可以执行以下操作:
const DeleteCategory = (props) => {
const delCategory = async () => {
const response = await fetch(`pathToServer/${props.value}`, { // put value from state (id some category)
method:'DELETE',
headers: {/.....}
});
const data = await response.json();
// Do whatever when your request has been performed.
};
return (
<div >
<button type="button" onClick={() => delCategory()}>Delete</button>
<button type="button" onClick={props.cancel}>Cancel</button>
</div>
);
};
推荐阅读
- reactjs - “水合作用”如何与 React 服务器组件一起工作?
- c++ - C++ 单 * 和 **
- asp.net-mvc - 带有模型的多个复选框返回 null
- swift - Sirikit - 将 Siri 自定义意图添加到框架
- laravel - 如何使用 nginx 配置 traefik 以使用 https 模式进行 cotrrect 工作?
- google-apps-script - Google 电子表格 - 仅在展开的行组中执行自定义函数
- kubernetes - 如何计算节点的总 CPU 请求
- azure - 如何使用 Azure Pipeline 在 AppConfig 中添加新密钥?
- android - 为什么我得到的类必须是来自房间的@Entity 或@DatabaseView 错误?
- django - 如何在 Django 模型中拥有图像字段?