React를 사용하여 접을 수있는리스트를 만들고 있습니다. 지금까지는 작동하지만 이제 모든 것을 확장/축소하는 버튼을 구현하려고합니다. 따라서 버튼은 모든 요소의 상태를 조정해야합니다. 그래도이 문제를 해결하는 가장 좋은 방법은 무엇인지 모르겠습니다. 이것은 내가 가지고있는 것입니다 :아이들에게 재귀 적으로 호출하는 메소드
import React, {Component} from 'react';
class CollapsibleList extends Component {
constructor(props) {
super(props);
this.state = {
collapsed: true
};
this.subLists = [];
this.papers = [];
if (this.props.subtitles) {
for (let subList of this.props.subtitles) {
this.subLists.push(
<CollapsibleList level={this.props.level + 1} subtitles={subList.subtitles} title={subList.title}/>
);
}
}
this.toggleCollapse = this.toggleCollapse.bind(this);
this.expandAll = this.expandAll.bind(this);
this.collapseAll = this.collapseAll.bind(this);
}
expandAll() {
this.setState({collapsed: false});
this.subLists.forEach(subList => subList.expandAll());
}
collapseAll() {
this.setState({collapsed: true});
this.subLists.forEach(subList => subList.collapseAll());
}
toggleCollapse() {
this.setState(prevState => {
return {collapsed: !prevState.collapsed};
});
}
render() {
return (this.state.collapsed ?
<li className={'collapsibleListItem'}>
<div onClick={this.toggleCollapse}>
{this.props.title}
</div>
<img title={'Expand all'} className={'icon'} alt={'Expand all'} src={require('../expand_all.png')} onClick={this.expandAll}/>
<img title={'Collapse all'} className={'icon'} alt={'Collapse all'} src={require('../collapse_all.png')} onClick={this.collapseAll}/>
</li> :
<li className={'collapsibleListItem'}>
<div onClick={this.toggleCollapse}>
{this.props.title}
</div>
<img title={'Expand all'} className={'icon'} alt={'Expand all'} src={require('../expand_all.png')} onClick={this.expandAll}/>
<img title={'Collapse all'} className={'icon'} alt={'Collapse all'} src={require('../collapse_all.png')} onClick={this.collapseAll}/>
<ul className={'collapsibleList'}>
{this.subLists}
</ul>
</li>
);
}
}
export default CollapsibleList;
불행히도, 그것은 작동하지 않는 것 같습니다.
어떤 에러가 발생합니까? – BlackBeard
축소 된 목록의 스크린 샷을 표시 할 수 있습니까? –
왜 재귀 렌더링을 사용해야하는지 이해할 수 없습니까? 로컬 상태에서 속성'collapsed'를 가진 부모 Component를 사용할 수 있습니다. '접힌 경우 '에만 버튼을 렌더링하십시오. 'collapsed하지 않으면 자식 컴포넌트 (예 : subList)를 루프로 렌더링합니다. 이처럼 (부모 구성 요소에서) 는 '하위 목록을하자 = subLists.map (목록 => { 반환 <하위 목록 목록 = {목록} /> })' 리턴 ( {하위 목록} ) –