Skip to content

Commit

Permalink
fix: static key
Browse files Browse the repository at this point in the history
  • Loading branch information
sxzz committed Jan 22, 2024
1 parent 6b8c16c commit ed19b0f
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ export function render(_ctx) {
`;

exports[`compiler: v-once > basic 1`] = `
"import { template as _template, children as _children, createTextNode as _createTextNode, setText as _setText, setDynamicProp as _setDynamicProp, prepend as _prepend } from 'vue/vapor';
"import { template as _template, children as _children, createTextNode as _createTextNode, setText as _setText, setClass as _setClass, prepend as _prepend } from 'vue/vapor';
export function render(_ctx) {
const t0 = _template("<div> <span></span></div>")
const n0 = t0()
const { 0: [n3, { 1: [n2],}],} = _children(n0)
const n1 = _createTextNode(_ctx.msg)
_setText(n1, undefined, _ctx.msg)
_setDynamicProp(n2, "class", undefined, _ctx.clz)
_setClass(n2, "class", undefined, _ctx.clz)
_prepend(n3, n1)
return n0
}"
Expand Down
39 changes: 17 additions & 22 deletions packages/compiler-vapor/src/generators/prop.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,36 +8,31 @@ export function genSetProp(oper: SetPropIRNode, context: CodegenContext) {

newline()

const element = `n${oper.element}`

// fast path for static props
if (isString(oper.key) || oper.key.isStatic) {
let keyName: string = isString(oper.key)
? oper.key
: JSON.stringify(oper.key)
const keyName = isString(oper.key) ? oper.key : oper.key.content

let helperName: string | undefined
if (keyName === 'class') {
pushFnCall(vaporHelper('setClass'), `n${oper.element}`, 'undefined', () =>
genExpression(oper.value, context),
)
return
}

if (keyName === 'style') {
pushFnCall(vaporHelper('setStyle'), `n${oper.element}`, 'undefined', () =>
genExpression(oper.value, context),
)
return
helperName = 'setClass'
} else if (keyName === 'style') {
helperName = 'setStyle'
} else if (oper.runtimePrefix) {
helperName = oper.runtimePrefix === '.' ? 'setDOMProp' : 'setAttr'
}

if (oper.runtimePrefix) {
if (helperName) {
pushFnCall(
vaporHelper(oper.runtimePrefix === '.' ? 'setDOMProp' : 'setAttr'),
`n${oper.element}`,
vaporHelper(helperName),
element,
() => {
const expr = () => genExpression(oper.key, context)
if (oper.runtimeCamelize) {
pushFnCall(helper('camelize'), () =>
genExpression(oper.key, context),
)
pushFnCall(helper('camelize'), expr)
} else {
genExpression(oper.key, context)
expr()
}
},
'undefined',
Expand All @@ -49,7 +44,7 @@ export function genSetProp(oper: SetPropIRNode, context: CodegenContext) {

pushFnCall(
vaporHelper('setDynamicProp'),
`n${oper.element}`,
element,
// 2. key name
() => {
if (oper.runtimeCamelize) {
Expand Down
2 changes: 1 addition & 1 deletion packages/compiler-vapor/src/ir.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ export interface SetPropIRNode extends BaseIRNode {
key: IRExpression
value: IRExpression
runtimeCamelize: boolean
runtimePrefix?: string
runtimePrefix?: '.' | '^'
}

export interface SetTextIRNode extends BaseIRNode {
Expand Down

0 comments on commit ed19b0f

Please sign in to comment.