gpt4 book ai didi

javascript - React Js 自定义 Accordion ,一次打开一项

转载 作者:行者123 更新时间:2023-11-30 14:53:50 25 4
gpt4 key购买 nike

我在 React 中有一个 Accordion ,由 row 组件组成,它在 body 父组件内循环。在 row 中,我正在切换状态 showDetails 以显示/隐藏每一行的 details,有效地打开 Accordion 项目。但是,由于状态是针对每一行的,如何在打开另一个 Accordion 项目时关闭一个 Accordion 项目?

正文:

export default class Body extends React.Component {
render() {
const {modelProps, showInfo, linkedRow} = this.props;
return (
<div className="c-table__body">
{this.props.model.map(
(subModel, i) =>
linkedRow ?
<LinkedRow
key={`${i}`}
model={subModel}
modelProps={modelProps}
/>
:
<Row
key={`${i}_${subModel.username}`}
model={subModel}
modelProps={modelProps}
showInfo={showInfo}
handleStatusChanged={this.props.handleStatusChanged}
/>
)}
</div>
);
}
}

行:

class Row extends React.Component {
constructor(props) {
super(props);
this.state = {
userId: '',
showDetails: false,
showModal: false,
status: '',
value: '',
showInfo: false
};
render() {
const { model, modelProps, showInfo } = this.props;
return (
<div className="c-table__row">
<div className="c-table__row-wrapper">
{modelProps.map((p, i) => (
<div className={`c-table__item ${this.isStatusCell(model[p]) ? model[p] : p}`} key={i}>{this.isStatusCell(model[p]) ? this.toTitleCase(model[p]) : model[p]}</div>
))}

{showInfo ? (
<div className="c-table__item c-table__item-sm">
<a
name="view-user"
onClick={this.showDetailsPanel}
className={this.state.showDetails ? 'info showing' : 'info'}
>
<Icon yicon="Expand_Cross_30_by_30" />
</a>
</div>
) : (
''
)}
</div>
{this.state.showDetails ? (<ConnectedDetails user={model} statusToggle={this.handleStatusChange}/>) : null}
</div>
);
}

}

export default Row;

不太确定如何解决这个问题,也许 body 中的某些内容会根据 showDetails 状态检查是否有任何 row 打开行?

提前致谢

最佳答案

解除状态的做法是<Row /><Body />开放成分。也打开了切换的方法<Row /><Body /> 上组件。

toggleOpen = (idx) => {
this.setState({ openRowIndex: idx });
}

然后当你渲染你的 <Row /> 时你可以传递一个属性 isOpen:

<Row
key={`${i}_${subModel.username}`}
model={subModel}
modelProps={modelProps}
showInfo={showInfo}
handleStatusChanged={this.props.handleStatusChanged}
isOpen={this.state.openRowIndex === i}
onToggle={_ => this.toggleOpen(i)}
/>

关于javascript - React Js 自定义 Accordion ,一次打开一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47694533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com