-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: x6-vue-shape teleport render #3378
Conversation
💖 Thanks for opening this pull request! 💖 Please follow the contributing guidelines. And we use semantic commit messages to streamline the release process. Examples of commit messages with semantic prefixes:
Things that will help get your PR across the finish line:
We get a lot of pull requests on this repo, so please be patient and we will get back to you as soon as we can. |
vue3 启用 teleport @antv/x6-vue-shape 多画布实例,会出现渲染异常 |
2023-03-14.18.47.02.mov |
我记得 1.x 版本是有提供 一个 类似 viewId 来划分 不同画布实例, 我想 Teleport 可选 传入 graph 实例 来划分 items,是不是 会比 1.x 版本 viewId 来的更加直观 |
1.x版本最开始的时候,TeleportContainer需要使用unique_graph_id,每个画布自己维护一份。 2.x版本的getTeleport不再需要和画布绑定,只要全局渲染一个TeleportContainer就可以了。 改成这样,接口会和x6-react-shape更统一。 |
🤔, 使用 teleport 是希望 node 组件 可以用到 父组件的 provide context, |
像这样,好像达不到目的 |
是否 可以 Teleport 提供一个 可选项 绑定 画布 import { defineComponent, provide } from "vue"
const Teleport = getTeleport();
const Graph1 = defineComponent({
setup() {
// 期望 node 节点可以获取到 bizContext1
provide("bizContext1", {})
return () => <div>
<div class="graph1" />
<Teleport />
</div>
}
})
const Graph2 = defineComponent({
setup() {
// 期望 node 节点可以获取到 bizContext2
provide("bizContext2", {})
return () => <div>
<div class="graph2" />
<Teleport />
</div>
}
})
const App = defineComponent({
setup() {
return () => <div>
<Graph1 />
<Graph2 />
</div>
}
}) 可以满足类似上面的场景, 🤔,不知道我这样表达的是否清楚,或者这样的需求 是否合理 |
要不,考虑合并下 🐶 @lloydzhou |
|
2.0.10 升级不会有问题,测试用例和文档应该是需要补充下。 |
你前面提到的希望能在Graph1和Graph2内部通过provide的API分别共享两个不同的context,让
然后,Graph1和Graph2内部使用inject分别拿到不同的update方法去更新context的值。Teleport中的节点,也可以通过inject分别拿到不同的value值 |
如果个数不定,需要通过 for 循环创建的 Graph1 ... GraphN 的话,不同的 Graph 如何知应该 inject 哪个呢。 也许有一些奇技淫巧能实现,但总感觉怪怪的,终是不如每个 Graph 使用自己的 Teleport |
其实这里提到的需求是希望Teleport内部的节点,能通过inject的方式拿到自己画布的一些数据。 但是,节点(Component)与画布(Graph)之间通信不一定非要使用inject的方式。 |
对了,其实我试过另一种封装第三方框架组件的模式
|
是的,这样也能到达目的。 |
如果两个画布没有共属关系,这种方法就不太满足了把,我现在页面上两个画布都用到了teleport,但两个画布组件没有任何关系,也放不在一起,这个时候因为teleport,切换页面画布的时候就会重复渲染 |
Description
Motivation and Context
Types of changes
Self Check before Merge