【发布时间】:2018-07-20 11:59:23
【问题描述】:
为这个菜鸟问题道歉,但我对 React 相当陌生。我在这里看到了一些与我所坚持的问题类似的问题,但我相信我的要求略有不同。
我正在创建一个 Accordion 组件,它是 AccordionItem 子组件的父组件。我为每个 AccordionItem 赋予了它自己的状态,以跟踪该项目是处于打开状态还是关闭状态。这很好用,我现在有一个可以工作的手风琴,当您单击项目的标题时,每个项目都可以打开或关闭。
但是我现在想添加功能,如果 AccordionItem 已经处于打开状态,它将在选择另一个 AccordionItem 时关闭。我相信我的 Accordion.js 中需要一个状态数组或对象来跟踪当前选择的 AccordionItems,然后每次点击都会更新。
我正在努力研究如何将父方法传递给子组件。
我的 App.js 目前如下所示:
class App extends Component {
render() {
return (
<Accordion>
<AccordionItem title="Question One Title" itemid="question1" openOnLoad onChange={this.updateSelectedItems}>
<p>here is some text 1</p>
</AccordionItem>
<AccordionItem title="Question Two Title" itemid="question2" onChange={this.updateSelectedItems}>
<p>here is some text 2</p>
</AccordionItem>
<AccordionItem title="Question Three Title" itemid="question3" onChange={this.updateSelectedItems}>
<p>here is some text 3</p>
</AccordionItem>
</Accordion>
);
}
}
我在网上看到的所有示例都显示父组件有一个道具,该道具将所选父方法的引用传递给子组件。但是,因为我的 AccordionItems 是在 App.js 中定义的,而不是 Accordion.js,所以 this.updateSelectedItems 在此文件中不存在。
我不想将 AccordionItems 移动到 Accordion 中,因为这样每个 Accordion 都会有相同的数据。
想法?
【问题讨论】:
标签: reactjs