如何解决无法从列表中删除组件React Hook
当我点击按钮触发移除时,我试图移除 React 状态(ListItem 组件)。但是,从状态中删除 React 后,它无法重新渲染。我该如何正确执行此操作?
import {Button,List} from "@material-ui/core";
import React,{useLayoutEffect,useState} from "react";
import useRules from "../sharedStates/Rules";
import useLanguange from "../sharedStates/Languages";
import axios from "axios";
import ListItem from "@material-ui/core/ListItem";
const REFRESH_JWT_URL = "/auth/api/refresh_jwt/"
const BLOCKCHAIN_DELETE_URL = "blockchain/api/rule/?id="
const DATALAKE_REMOVE_URL = "datalake/api/remove_rule"
//TODO: Implement Translation.
//TODO: Implement Delete Rule.
const RuleList = ({
rules,rerender,userID,groupIDs,orgID,jwtRefresh,jwtAccess,username
}) => {
const [_rules,_setRules] = useState(rules)
const editRule = () => {
console.log("Todo: Implement Edit Rule")
}
const removeRule = (ruleId) => {
console.log("TODO: IMPLEMENT DELETE RULE IN THE DB")
//TODO: Figure out the reason this is not working
// _setRules(_rules.filter(rule => rule.id !== ruleId));
}
return (
<List>
{
_rules.map((rule => (
<ListItem key={rule.id}>
<p> {lang.label.I} {" "} <b>{lang.label[rule.action]}</b> {lang.label.toAccessTags} </p>
<p> <b>
{
Object.values(rule.access).map(tag =>
tag.name
).join(",")
}
</b>
</p>
<p>{lang.label.toTheProfesional} {" "} <b>{rule.granteeID}</b></p>
<p>{lang.label.ruleExpiresIn} {rule.expires}</p>
<Button onClick={editRule}>{lang.label.Edit}</Button>
<Button onClick={removeRule(rule.id)}>{lang.label.Remove}</Button>
</ListItem>
)))
}
</List>
)
}
export default RuleList
当我取消注释这一行时, // _setRules(_rules.filter(rule => rule.id !== ruleId));
。即使在我单击删除按钮之前,该列表也不会显示在页面上。
请指教。
之前谢谢。
解决方法
你必须使用像这样的箭头函数 onClick={() => removeRule(rule.id)}
而不是 onClick={removeRule(rule.id)}
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。