fix(runtime-core): should not warn unused attrs when accessed via setup context
close #625
This commit is contained in:
parent
c35fea3d60
commit
751d838fb9
@ -326,4 +326,28 @@ describe('attribute fallthrough', () => {
|
|||||||
`<!----><div></div><div class="parent"></div><!---->`
|
`<!----><div></div><div class="parent"></div><!---->`
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should not warn when context.attrs is used during render', () => {
|
||||||
|
const Parent = {
|
||||||
|
render() {
|
||||||
|
return h(Child, { foo: 1, class: 'parent' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const Child = defineComponent({
|
||||||
|
props: ['foo'],
|
||||||
|
setup(_props, { attrs }) {
|
||||||
|
return () => [h('div'), h('div', attrs)]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const root = document.createElement('div')
|
||||||
|
document.body.appendChild(root)
|
||||||
|
render(h(Parent), root)
|
||||||
|
|
||||||
|
expect(`Extraneous non-props attributes`).not.toHaveBeenWarned()
|
||||||
|
expect(root.innerHTML).toBe(
|
||||||
|
`<!----><div></div><div class="parent"></div><!---->`
|
||||||
|
)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
@ -28,7 +28,10 @@ import {
|
|||||||
} from '@vue/shared'
|
} from '@vue/shared'
|
||||||
import { SuspenseBoundary } from './components/Suspense'
|
import { SuspenseBoundary } from './components/Suspense'
|
||||||
import { CompilerOptions } from '@vue/compiler-core'
|
import { CompilerOptions } from '@vue/compiler-core'
|
||||||
import { currentRenderingInstance } from './componentRenderUtils'
|
import {
|
||||||
|
currentRenderingInstance,
|
||||||
|
markAttrsAccessed
|
||||||
|
} from './componentRenderUtils'
|
||||||
|
|
||||||
export type Data = { [key: string]: unknown }
|
export type Data = { [key: string]: unknown }
|
||||||
|
|
||||||
@ -428,7 +431,12 @@ export const SetupProxySymbol = Symbol()
|
|||||||
const SetupProxyHandlers: { [key: string]: ProxyHandler<any> } = {}
|
const SetupProxyHandlers: { [key: string]: ProxyHandler<any> } = {}
|
||||||
;['attrs', 'slots'].forEach((type: string) => {
|
;['attrs', 'slots'].forEach((type: string) => {
|
||||||
SetupProxyHandlers[type] = {
|
SetupProxyHandlers[type] = {
|
||||||
get: (instance, key) => instance[type][key],
|
get: (instance, key) => {
|
||||||
|
if (__DEV__) {
|
||||||
|
markAttrsAccessed()
|
||||||
|
}
|
||||||
|
return instance[type][key]
|
||||||
|
},
|
||||||
has: (instance, key) => key === SetupProxySymbol || key in instance[type],
|
has: (instance, key) => key === SetupProxySymbol || key in instance[type],
|
||||||
ownKeys: instance => Reflect.ownKeys(instance[type]),
|
ownKeys: instance => Reflect.ownKeys(instance[type]),
|
||||||
// this is necessary for ownKeys to work properly
|
// this is necessary for ownKeys to work properly
|
||||||
|
Loading…
Reference in New Issue
Block a user