element [Bug Report] 二次封装的Table无法正常渲染表格数据

fsi0uk1n  于 4个月前  发布在  其他
关注(0)|答案(7)|浏览(96)

Element UI version

2.13.2

OS/Browsers version

windows 10 / chrome 83.0.4103.61

Vue version

2.6.11

https://codepen.io/frank-we/pen/BajaQyV

Steps to reproduce

1、按需引入elementUi组件,并对el-tabel进行二次封装成WTable,构建为独立Ui库;
2、引入第三方项目中使用,发现WTable无法正常渲染数据;
3、全部引入整个elementUi后再构建成库,第三方项目使用则一切正确。
4、第三方项目也按需引入了elementUi,版本一致。
5、重现链接为第三方项目中引入二次封装库的使用代码,封装仅对样式进行风格统一和加入el-pagination。

What is Expected?

按需引入elementUi,封装后在第三方库能正确渲染表格数据

What is actually happening?

el-table封装后在第三方项目使用中无法正常渲染数据。

经查看源码,发现 table-header.js 、 table-body.js 等等文件中的 mapStates 部分,无法响应获取 data、columns等数据,导致表格没有正确渲染。

huwehgph

huwehgph1#

我也碰到了这种问题 请问您这边解决了么

lokaqttq

lokaqttq2#

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

ocebsuys

ocebsuys4#

@frank-we 你解决这个问题了吗

i2loujxw

i2loujxw5#

解决方案:项目中和第三方库只能存在一个vue,第三方库打包时必须得排除掉vue。
webpack可加以下属性排除打包
externals = {
vue: 'Vue'
};

42fyovps

42fyovps6#

解决方案:项目中和第三方库只能存在一个vue,第三方库打包时必须得排除掉vue。 webpack可加以下属性排除打包 externals = { vue: 'Vue' };

造成这个问题的原因如下:
1.table组件有一个store进行数据维护,store是一个vue实例,table组件的数据等信息都会记录到这个store中去,当store数据发生变化时驱动视图变化。
2.Vue的依赖收集收集的只能是watcher,计算属性,渲染函数,watch函数等都是watcher。当我们的watcher执行前,会先把自己指向Dep.target。然后store的属性被使用时,它getter函数就会被触发进行watcher收集,但是收集前会先判断Dep.target 是否存在,存在则把Dep.target放入依赖里。
3.所以项目中的Vue和store的Vue不是同一个时 ,就会存在table组件的watcher指向的Dep和store的getter函数进行判断的Dep不是同一个。进而导致store的数据变化了,但是table的计算watcher,渲染watcher不会被通知执行。因为根本就没有被收集。

mm5n2pyu

mm5n2pyu7#

一模一样的问题,但是加了externals属性好像没有用

相关问题