Skip to content

Commit d162f17

Browse files
committed
fix: 修复 AtAccordion 组件展开高度错误的问题
#1656#1364
1 parent daa2fdc commit d162f17

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

packages/taro-ui/src/components/accordion/index.tsx

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import React from 'react'
44
import { Text, View } from '@tarojs/components'
55
import { CommonEvent } from '@tarojs/components/types/common'
66
import { AtAccordionProps, AtAccordionState } from '../../../types/accordion'
7-
import { delayQuerySelector } from '../../common/utils'
7+
import { delayQuerySelector, uuid } from '../../common/utils'
88

99
export default class AtAccordion extends React.Component<
1010
AtAccordionProps,
@@ -21,6 +21,7 @@ export default class AtAccordion extends React.Component<
2121
this.isCompleted = true
2222
this.startOpen = false
2323
this.state = {
24+
componentId: uuid(),
2425
wrapperHeight: 0
2526
}
2627
}
@@ -34,10 +35,12 @@ export default class AtAccordion extends React.Component<
3435

3536
private toggleWithAnimation(): void {
3637
const { open, isAnimation } = this.props
38+
const { componentId } = this.state
3739
if (!this.isCompleted || !isAnimation) return
3840

3941
this.isCompleted = false
40-
delayQuerySelector('.at-accordion__body', 0).then(rect => {
42+
43+
delayQuerySelector(`#at-accordion__body-${componentId}`, 0).then(rect => {
4144
const height = parseInt(rect[0].height.toString())
4245
const startHeight = open ? height : 0
4346
const endHeight = open ? 0 : height
@@ -73,15 +76,8 @@ export default class AtAccordion extends React.Component<
7376
}
7477

7578
public render(): JSX.Element {
76-
const {
77-
customStyle,
78-
className,
79-
title,
80-
icon,
81-
hasBorder,
82-
open,
83-
note
84-
} = this.props
79+
const { customStyle, className, title, icon, hasBorder, open, note } =
80+
this.props
8581
const { wrapperHeight } = this.state
8682

8783
const rootCls = classNames('at-accordion', className)
@@ -111,6 +107,8 @@ export default class AtAccordion extends React.Component<
111107
contentStyle.height = ''
112108
}
113109

110+
const { componentId } = this.state
111+
114112
return (
115113
<View className={rootCls} style={customStyle}>
116114
<View className={headerCls} onClick={this.handleClick}>
@@ -126,7 +124,12 @@ export default class AtAccordion extends React.Component<
126124
</View>
127125
</View>
128126
<View style={contentStyle} className={contentCls}>
129-
<View className='at-accordion__body'>{this.props.children}</View>
127+
<View
128+
id={`at-accordion__body-${componentId}`}
129+
className='at-accordion__body'
130+
>
131+
{this.props.children}
132+
</View>
130133
</View>
131134
</View>
132135
)

packages/taro-ui/types/accordion.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { MouseEvent, ComponentClass } from 'react'
1+
import { ComponentClass } from 'react'
22
import { CommonEvent } from '@tarojs/components/types/common'
33

44
import AtComponent, { AtIconBaseProps } from './base'
@@ -40,6 +40,7 @@ export interface AtAccordionProps extends AtComponent {
4040
}
4141

4242
export interface AtAccordionState {
43+
componentId?: string
4344
wrapperHeight: number
4445
}
4546

0 commit comments

Comments
 (0)