我有下面的函数,它调用显示一个模式对话框点击编辑按钮.我如何从功能展示模式呈现功能组件UpdateModal

以下是其功能:

const showModal = (user: IUser) => {
  setShowUpdateModal(true);
  return (
    <>
      <div>Hello</div>
      <UpdateModal
      
        showUpdateModal={showUpdateModal}
        setShowUpdateModal={
          (bool: boolean | ((prevState: boolean) => boolean)) => 
            setShowUpdateModal(bool)
        }
      />
    </>
  );
}

更新模式:



const 更新模式: FC<updateModalProps> = ({
  setShowUpdateModal,
  showUpdateModal,
  user
}) => {
  console.log("showUpdateModal....", showUpdateModal);
  return (
    <Modal showUpdateModal={showUpdateModal}>
      <Modal.Dialog>
        <Modal.Header closeButton onClick={() => setShowUpdateModal(false)}>
          <Modal.Title className={`${styles.createText}`}>
            Create User Form
          </Modal.Title>
        </Modal.Header>
        <Modal.Body>
          <UpdateUser user={user} setShowUpdateModal={setShowUpdateModal} />
        </Modal.Body>
      </Modal.Dialog>
    </Modal>
  );
}

export default UpdateModal;

推荐答案

问题是,您不能从回调函数返回JSX并期望RESPECT知道它需要在某个地方呈现它.

showModal回调可以更新showUpdateModal状态,父组件将使用更新后的状态值重新呈现.在这里,您只需将模型作为父组件的呈现返回的一部分呈现即可.

更新showUpdateModal状态以保存对特定用户的引用或空值.把这个传给情态车的userprops .所有模式关闭操作都应将showUpdateModal状态设置回null以关闭模型.

示例:

function UserContent() {
  const [showUpdateModal, setShowUpdateModal] = useState<IUser | null>(null);

  const showModal = (user: IUser) => {
    setShowUpdateModal(user);
  };

  ...

  return (
    <>
      <div>
        <Table responsive striped bordered hover variant="light">
          ...
          <Pen
            color="black"
            size={20}
            onClick={() => showModal(user)} // <-- toggles modal open
         />
          ...
        </Table>
      </div>

      <UpdateModal
        user={showUpdateModal} // user or null
        showUpdateModal={!!showUpdateModal} // <-- toggles modal open/close
        setShowUpdateModal={setShowUpdateModal}
      />

      ...
    </>
  );
}
type updateModalProps = {
  setShowUpdateModal: (user: IUser | null) => void;
  showUpdateModal: IUser | null;
  user: IUser;
};

const UpdateModal: FC<updateModalProps> = ({
  setShowUpdateModal,
  showUpdateModal,
  user
}) => {
  return (
    <Modal showUpdateModal={showUpdateModal}>
      <Modal.Dialog>
        <Modal.Header closeButton onClick={() => setShowUpdateModal(null)}>
          <Modal.Title className={`${styles.createText}`}>
            Create User Form
          </Modal.Title>
        </Modal.Header>
        <Modal.Body>
          <UpdateUser user={user} setShowUpdateModal={setShowUpdateModal} />
        </Modal.Body>
      </Modal.Dialog>
    </Modal>
  );
}

Typescript相关问答推荐

typescript抱怨值可以是未定义的,尽管类型没有定义

TypeScript类型不匹配:在返回类型中处理已经声明的Promise Wrapper

使某些类型的字段变为可选字段'

如何在使用`Next—intl`和`next/link`时导航

如何使函数接受类型脚本中具有正确类型的链接修饰符数组

来自类型脚本中可选对象的关联联合类型

如何判断对象是否有重叠的叶子并产生有用的错误消息

如何在Reaction路由v6.4加载器和操作中获得Auth0访问令牌?

Angular NgModel不更新Typescript

为什么有条件渲染会导致material 自动完成中出现奇怪的动画?

嵌套对象的类型

使用Redux Saga操作通道对操作进行排序不起作用

从子类集合实例化类,同时保持对Typescript中静态成员的访问

创建Angular 为17的动态形状时出错

如何在Angular 服务中制作同步方法?

在打字脚本中对可迭代对象进行可变压缩

类型与泛型抽象类中的类型不可比较

如何通过属性名在两个泛型数组中找到匹配的对象?

将类型脚本函数返回类型提取到VSCode中的接口

在 TypeScript 中实现类型级别深度优先搜索