fix(runtime-dom/style): normalize string when merging styles (#1127)

This commit is contained in:
t-zzzzzzzzz 2020-05-06 23:14:07 +08:00 committed by GitHub
parent 4d9b651d82
commit 2d9f136077
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 1 deletions

View File

@ -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', () => {
let clickHandler1 = function() {}

View File

@ -7,7 +7,8 @@ export function normalizeStyle(
if (isArray(value)) {
const res: Record<string, string | number> = {}
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) {
for (const key in normalized) {
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(
styles: Record<string, string | number> | undefined
): string {