組件核心代碼:javascript
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;
組件調用:
java
<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>
頁面:react
且默認第一項是展開的,代碼控制:ide