reactjs - React Pluggable - 卸载插件时组件不会从 DOM 中删除
问题描述
TodoPlugin.tsx 在安装时呈现组件。
import React, { Component } from "react";
import { IPlugin, PluginStore } from "react-pluggable";
import Todos from "../components/todo/Todos";
import MainTodo from "../components/todo/MainTodo";
class TodoPlugin implements IPlugin {
namespace = "Todo";
pluginStore!: PluginStore;
getPluginName(): string {
return `${this.namespace}@1.0.0`;
}
getDependencies(): string[] {
return [];
}
init(pluginStore: PluginStore): void {
this.pluginStore = pluginStore;
}
TodoComponent = () => {
return <MainTodo />;
};
activate(): void {
this.pluginStore.executeFunction(
"Renderer.add",
"Todo.todos",
this.TodoComponent
);
}
deactivate(): void {
this.pluginStore.removeFunction("Todo.todos");
}
}
export default TodoPlugin;
Test.tsx,它在按钮单击时安装和卸载 Todo 插件。
const onLogin = (event: any) => {
pluginStore.install("Todo");
};
const onLogout = (event: any) => {
pluginStore.uninstall("Todo");
};
return (
<>
<button id="login" onClick={onLogin}>
Login
</button>
<button
id="logout" onClick={onLogout}
>
Logout
</button>
<Renderer placement={"Todo.todos"} />
</>
);
单击 Logout 按钮时,放置 Todo.todos 的组件没有被删除,如果我再次单击 Login 按钮,则会在第一个组件之后创建并呈现一个新组件。
解决方案
在您的停用功能中,您尚未从渲染器中删除组件。您可以通过以下代码段删除组件,而不是删除“Todo.todo”:
this.pluginStore.executeFunction(
"Renderer.remove",
"Todo.todos",
);
推荐阅读
- python - 为什么 python 脚本从本地 IP 运行,但在 IIS 配置 IP 时出错?
- vb6 - 在 VB6 中从 WebBrowser 中捕获双击
- templates - 如何在拣货单上显示套件项目的组件项目的自定义字段 - Netsuite
- python - 在列中删除带有 Type(int) 的值
- angular - 如何在 Angular 中以一种方法订阅 httpRequest 和 observable
- sql-server - 如何将 SQL Server 函数 (T-SQL) 转换为 Oracle 的 PL/SQL 函数?
- javascript - ReactJS 文本输入
- php - 邮件发送给数据库的第一个学生 n 次
- c# - 需要帮助接受用户输入
- angular - 角材料表页脚 - 对齐问题