我有两个文件:Modal.jsUsers.js.Users.js包含一个映射了API Get Query的表,在表的最后一列中,每一行都有一个下拉列表,该行包含三个按钮:查看、编辑和删除.我希望Delete按钮触发通道,其中包含一条大致如下的消息:"您确定要删除该用户吗?"

我正在努力让通道在Users.js文件的Delete组件的onClick事件中触发,我将附上下面两个文件的代码.

Modal.js(我还没有编辑模式中的任何内容)

import {
  CButton,
  CModal,
  CModalHeader,
  CModalTitle,
  CModalBody,
  CModalFooter,
} from "@coreui/react";

const Modal = ({ visible, setVisible }) => {
  return (
    <>
      <CModal visible={visible} onClose={() => setVisible(false)}>
        <CModalHeader onClose={() => setVisible(false)}>
          <CModalTitle>Modal title</CModalTitle>
        </CModalHeader>
        <CModalBody>Woohoo, you're reading this text in a modal!</CModalBody>
        <CModalFooter>
          <CButton color="secondary" onClick={() => setVisible(false)}>
            Close
          </CButton>
          <CButton color="primary">Save changes</CButton>
        </CModalFooter>
      </CModal>
    </>
  );
};

export default Modal;

Users.js

<CTableRow v-for="item in tableItems" key={rows.userID}>
  <CTableDataCell className="text-center">{rows.userID}</CTableDataCell>
  <CTableDataCell>{rows.firstName}</CTableDataCell>
  <CTableDataCell>
    <div>{rows.lastName}</div>
  </CTableDataCell>
  <CTableDataCell className="column-overflow">{rows.email}</CTableDataCell>
  <CTableDataCell>{rows.role}</CTableDataCell>
  <CTableDataCell>{rows.createdAt}</CTableDataCell>
  <CTableDataCell>{rows.updatedAt}</CTableDataCell>

  <CTableDataCell>
    <strong>{rows.lastLogin}</strong>
  </CTableDataCell>
  <CTableDataCell>
    <CDropdown>
      <CDropdownToggle color="transparent"></CDropdownToggle>
      <CDropdownMenu>
        <CDropdownItem className="dropdown-item pointer">View</CDropdownItem>
        <CDropdownItem className="dropdown-item pointer">Edit</CDropdownItem>

        <CDropdownItem
          className="dropdown-item text-danger pointer"
          onClick={() => Modal()} <- Issue here
        >
          Delete
        </CDropdownItem>
      </CDropdownMenu>
    </CDropdown>
  </CTableDataCell>
</CTableRow>;

如果有任何帮助,我将不胜感激.如果我可以给出任何其他代码,请告诉我(我已经减少了Users.js文件,因为它只有160多行,我不想杂乱无章,除了这一行,这样您就可以知道Delete按钮在哪里).

提前谢谢!

推荐答案

Modal组件需要在页面中具有由父级控制的visibleprops (而不是作为函数调用).这CoreUI examples for CModal个对于您的用例来说有点误导.我建议在父Users组件中使用useState,并为Close事件向Modal传递一个setter回调.

例如:

Users.js

const Users = () => {
  const [visible, setVisible] = React.useState(false);
  const [selectedUser, setSelectedUser] = React.useState(null);

  const rows = [
    { userID: "1", firstName: "Cameron", lastName: "E" },
    { userID: "2", firstName: "Steve", lastName: "G" }
  ];

  return (
    <>
      <CTable>
        {rows.map((row) => {
          return (
            <CTableRow v-for="item in tableItems" key={row.userID}>
              <CTableDataCell className="text-center">
                {row.userID}
              </CTableDataCell>
              <CTableDataCell>{row.firstName}</CTableDataCell>
              <CTableDataCell>
                <div>{row.lastName}</div>
              </CTableDataCell>
              <CTableDataCell className="column-overflow">
                {row.email}
              </CTableDataCell>
              <CTableDataCell>{row.role}</CTableDataCell>
              <CTableDataCell>{row.createdAt}</CTableDataCell>
              <CTableDataCell>{row.updatedAt}</CTableDataCell>

              <CTableDataCell>
                <strong>{row.lastLogin}</strong>
              </CTableDataCell>
              <CTableDataCell>
                <CDropdown>
                  <CDropdownToggle color="transparent">
                    Dropdown button
                  </CDropdownToggle>
                  <CDropdownMenu>
                    <CDropdownItem className="dropdown-item pointer">
                      View
                    </CDropdownItem>
                    <CDropdownItem className="dropdown-item pointer">
                      Edit
                    </CDropdownItem>

                    <CDropdownItem
                      className="dropdown-item text-danger pointer"
                      onClick={() => {
                        setSelectedUser(row);
                        setVisible(true);
                      }}
                    >
                      Delete
                    </CDropdownItem>
                  </CDropdownMenu>
                </CDropdown>
              </CTableDataCell>
            </CTableRow>
          );
        })}
      </CTable>
      <Modal
        visible={visible}
        user={selectedUser}
        onClose={() => setVisible(false)}
      />
    </>
  );
};

莫达尔.js莫达尔.js

const Modal = ({ visible, onClose, user }) => {
  return (
    <>
      <CModal visible={visible} onClose={onClose}>
        <CModalHeader onClose={onClose}>
          <CModalTitle>Delete {user.firstName}?</CModalTitle>
        </CModalHeader>
        <CModalBody>
          Are you sure you want to delete {user.firstName}? (He's a good guy.)
        </CModalBody>
        <CModalFooter>
          <CButton color="secondary" onClick={onClose}>
            Yeah he is a good guy
          </CButton>
          <CButton color="primary">Nuke 'Em!</CButton>
        </CModalFooter>
      </CModal>
    </>
  );
};

Note:作为额外的好处,我添加了一个将所选用户传递给Modal的示例,以便页面中只有Modal组件的一个实例.

Working CodeSandbox: https://codesandbox.io/s/cold-leftpad-l5ivqy?file=/src/莫达尔.js莫达尔.js

Users.js Rendered Users.js Rendered

莫达尔.js莫达尔.js Rendered 莫达尔.js莫达尔.js Rendered

Javascript相关问答推荐

如何在angular中从JSON值添加动态路由保护?

将自定义排序应用于角形数字数组

单击ImageListItemBar的IconButton后,在Material—UI对话框中显示图像

如何从Intl.DateTimeFormat中仅获取时区名称?

如何从网站www.example.com获取表与Cheerio谷歌应用程序脚本

Websocket错误—有一个或多个保留位开启:reserved1 = 1,reserved2 = 0,reserved3 = 0

Ember.js 5.4更新会话存储时如何更新组件变量

优化Google Sheet脚本以将下拉菜单和公式添加到多行

在运行时使用Next JS App Router在服务器组件中运行自定义函数

根据一个条件,如何从处理过的数组中移除一项并将其移动到另一个数组?

警告框不显示包含HTML输入字段的总和

处理TypeScrip Vue组件未初始化的react 对象

如何通过Axios在GraphQL查询中发送数组

用另一个带有类名的div包装元素

如何将字符串拆分成单词并跟踪每个单词的索引(在原始字符串中)?

如何在Reaction中设置缺省值, Select 下拉列表,动态追加剩余值?

我如何才能让p5.js在不使用实例模式的情况下工作?

浮动标签效果移除时,所需的也被移除

JS/css:将数字输入的S函数和可调整大小的元素S函数绑定在一起

响应,Use Callback更新状态变量,该变量也存在于其依赖数组中,它如何防止无限重新呈现?