fix(runtime-dom/style): normalize string when merging styles (#1127)
This commit is contained in:
parent
4d9b651d82
commit
2d9f136077
@ -258,6 +258,34 @@ describe('vnode', () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
test('style', () => {
|
||||||
|
let props1: Data = {
|
||||||
|
style: 'width:100px;right:10;top:10'
|
||||||
|
}
|
||||||
|
let props2: Data = {
|
||||||
|
style: [
|
||||||
|
{
|
||||||
|
color: 'blue',
|
||||||
|
width: '200px'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
width: '300px',
|
||||||
|
height: '300px',
|
||||||
|
fontSize: 30
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
expect(mergeProps(props1, props2)).toMatchObject({
|
||||||
|
style: {
|
||||||
|
color: 'blue',
|
||||||
|
width: '300px',
|
||||||
|
height: '300px',
|
||||||
|
fontSize: 30,
|
||||||
|
right: 10,
|
||||||
|
top: 10
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
test('handlers', () => {
|
test('handlers', () => {
|
||||||
let clickHandler1 = function() {}
|
let clickHandler1 = function() {}
|
||||||
|
@ -7,7 +7,8 @@ export function normalizeStyle(
|
|||||||
if (isArray(value)) {
|
if (isArray(value)) {
|
||||||
const res: Record<string, string | number> = {}
|
const res: Record<string, string | number> = {}
|
||||||
for (let i = 0; i < value.length; i++) {
|
for (let i = 0; i < value.length; i++) {
|
||||||
const normalized = normalizeStyle(value[i])
|
const styles = isString(value[i]) ? strStyleToObj(value[i]) : value[i]
|
||||||
|
const normalized = normalizeStyle(styles)
|
||||||
if (normalized) {
|
if (normalized) {
|
||||||
for (const key in normalized) {
|
for (const key in normalized) {
|
||||||
res[key] = normalized[key]
|
res[key] = normalized[key]
|
||||||
@ -20,6 +21,18 @@ export function normalizeStyle(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function strStyleToObj(style: string) {
|
||||||
|
const ret: Record<string, string | number> = {}
|
||||||
|
style
|
||||||
|
.replace(/\s*/g, '')
|
||||||
|
.split(';')
|
||||||
|
.forEach((item: string) => {
|
||||||
|
const [key, val] = item.split(':')
|
||||||
|
ret[key] = isNaN(Number(val)) ? val : Number(val)
|
||||||
|
})
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
export function stringifyStyle(
|
export function stringifyStyle(
|
||||||
styles: Record<string, string | number> | undefined
|
styles: Record<string, string | number> | undefined
|
||||||
): string {
|
): string {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user