【问题标题】:Unable to remove the component from the list (React Hook)无法从列表中删除组件(React Hook)
【发布时间】:2021-02-10 05:09:17
【问题描述】:

当我单击按钮触发删除时,我正在尝试删除 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 =&gt; rule.id !== ruleId));。即使在我单击删除按钮之前,该列表也不会显示在页面上。

请指教。

之前谢谢。

【问题讨论】:

  • onClick={removeRule(rule.id)} 在箭头函数中传递 removeRule 像 this'onClick={()=&gt;{removeRule(rule.id)}} 因为当你的规则被渲染时 removeRule() 会立即被调用,所以你必须像这样调用它

标签: javascript reactjs react-hooks react-state


【解决方案1】:

你必须使用 onClick={() =&gt; removeRule(rule.id)} 这样的箭头函数,而不是 onClick={removeRule(rule.id)}

【讨论】:

    猜你喜欢
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多