组件核心代码:
import React from 'react';
// import PropTypes from 'prop-types';
// 展开收起组件
class ArrowSlide extends React.Component {
static defaultProps = {
itemLable: false, // 是否展开
itemsName: '' // 检查项目名称
};
constructor(props) {
super(props);
const { itemLable } = props; // 是否展开收起列表项
this.state = {
itemLable
};
}
/**
* 展开收起切换
* @memberof EleItem
*/
handleToggleCondition = () => {
const { itemLable } = this.state;
this.setState({ itemLable: !itemLable });
}
render() {
const { itemsName } = this.props;
const { itemLable } = this.state;
return (
<div style={{ marginTop: '10px' }}>
<a className="arrow-alide" onClick={this.handleToggleCondition}>
{itemsName}<i className={`iconfont ${itemLable ? 'icon-xiangxia2' : 'icon-xiangshang2'}`} />
</a>
<div style={{ transition: 'all .4s', maxHeight: itemLable ? '10000px' : '0px', overflow: 'hidden' }}>{this.props.children}</div>
</div>
);
}
}
export default ArrowSlide;
组件调用:
<ArrowSlide
itemsName={elem.exam_fee_name} // 检查项组名称
itemLable={index === 0} // 是否展开
key={i}
>
<TemplateBase
isNum={isNum}
form={form}
data={exam_pro_lists}
parentCode={elem.exam_pro_id}
onFieldValueChange={(e, field, code, id) => handleTemplateFieldsChange(e, field, code, id)}
>
{(exam_pro_lists || []).map(({ exam_code: code = 0 }) => {
const checkItem = TemplateBase.config[code];
const config = `${code}` === '326';
if (checkItem) {
return <checkItem.name
key={code}
code={code}
config={config}
/>;
}
return '';
})}
</TemplateBase>
</ArrowSlide>
页面:
且默认第一项是展开的,代码控制: