gpt4 book ai didi

javascript - 如何使用语义 UI react 打开多个 Accordion ?

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

我正在尝试使用包含多个条目的语义 UI Accordion ,并允许一次打开多个条目;每个条目都有一个标题部分,其中包含一个带有弹出窗口的图标和一个包含文本区域的内容区域。

我希望能够同时打开两个 Accordion ,这显然是通过在制作 Accordion 元素时使用 exclusive={false} Prop 来支持的,如 documentation here 中所述。

但是那个例子看起来使用了一个对象数组,其内容是一个字符串,而不是其他 react/html/jsx 元素(在我的例子中是语义 ui 图标、弹出窗口和文本区域)。该对象数组传递给 Accordion 的 panel 属性。

而且我不熟悉语义 ui react Accordion 需要什么才能正确运行以跟踪索引和其他内容,我不确定我还需要配置什么,或者这是否可以按原样使用语义 ui 组件。

我基本上复制了this example并使用一个事件索引和一个 onclick 处理程序来切换组件 react 状态中的事件索引。

这是 Accordion 和 onclick 处理程序的片段以及 react 应用程序状态:

class FileUpload extends Component {

// other stuff omitted

constructor(props) {
super(props);

this.state = {
activeAccordionIndex: -1
};

handleAccordionClick = (e, titleProps) => {
const { index } = titleProps;
const { activeAccordionIndex } = this.state;
const newIndex = activeAccordionIndex === index ? -1 : index;

this.setState({
activeAccordionIndex: newIndex
})
}

// I'm using a small helper function to create the accordion and invoke it in
// the render method, just one item for brevity; the other entries are pretty
// much the same

getAccordionInputs() {

const { activeAccordionIndex } = this.state;

let accordionContent = (
<Accordion fluid exclusive={false}>
<Accordion.Title
className="file-upload-ordinal-accord-title"
active={activeAccordionIndex === 0}
index={0}
onClick={this.handleAccordionClick}
>
<Icon name='dropdown' />
Enter Ordinal Features
<Popup
on="click"
position="right center"
header="Ordinal Features Help"
content={
<div className="content">
<p>Ordinal Features help description</p>
</div>
}
trigger={
<Icon
className="file-upload-ordinal-help-icon"
inverted
size="large"
color="orange"
name="info circle"
/>
}
/>
</Accordion.Title>
<Accordion.Content
active={activeAccordionIndex === 0}
>
<textarea
className="file-upload-ordinal-text-area"
id="ordinal_features_text_area_input"
label="Ordinal Features"
placeholder={"{\"ord_feat_1\": [\"MALE\", \"FEMALE\"], \"ord_feat_2\": [\"FIRST\", \"SECOND\", \"THIRD\"]}"}
onChange={this.handleOrdinalFeatures}
/>
</Accordion.Content>
</Accordion>
)
return accordionContent;
}

}

我不知道如何设置它以允许同时打开多个 Accordion 内容不是字符串的内容。这可能与语义 ui Accordion 有关吗?或者我是否需要寻找替代解决方案和/或手工制作具有所需行为的作品?

最佳答案

您可以更改您的索引逻辑,而不是在您的状态下设置事件索引,而是将索引添加到数组中并检查它是否存在于数组中以及它是否显示 Accordion

这是一个例子:

export default class AccordionExampleStandard extends Component {
state = { activeIndexs: [] };

handleClick = (e, titleProps) => {
const { index } = titleProps;
const { activeIndexs } = this.state;
const newIndex = activeIndexs;

const currentIndexPosition = activeIndexs.indexOf(index);
if (currentIndexPosition > -1) {
newIndex.splice(currentIndexPosition, 1);
} else {
newIndex.push(index);
}

this.setState({ activeIndexs: newIndex });
};

render() {
const { activeIndexs } = this.state;

return (
<Accordion>
<Accordion.Title
active={activeIndexs.includes(0)}
index={0}
onClick={this.handleClick}
>
<Icon name="dropdown" />
What is a dog?
</Accordion.Title>
<Accordion.Content active={activeIndexs.includes(0)}>
<p>
A dog is a type of domesticated animal. Known for its loyalty and
faithfulness, it can be found as a welcome guest in many households
across the world.
</p>
</Accordion.Content>

<Accordion.Title
active={activeIndexs.includes(1)}
index={1}
onClick={this.handleClick}
>
<Icon name="dropdown" />
What kinds of dogs are there?
</Accordion.Title>
<Accordion.Content active={activeIndexs.includes(1)}>
<p>
There are many breeds of dogs. Each breed varies in size and
temperament. Owners often select a breed of dog that they find to be
compatible with their own lifestyle and desires from a companion.
</p>
</Accordion.Content>

<Accordion.Title
active={activeIndexs.includes(2)}
index={2}
onClick={this.handleClick}
>
<Icon name="dropdown" />
How do you acquire a dog?
</Accordion.Title>
<Accordion.Content active={activeIndexs.includes(2)}>
<p>
Three common ways for a prospective owner to acquire a dog is from
pet shops, private owners, or shelters.
</p>
<p>
A pet shop may be the most convenient way to buy a dog. Buying a dog
from a private owner allows you to assess the pedigree and
upbringing of your dog before choosing to take it home. Lastly,
finding your dog from a shelter, helps give a good home to a dog who
may not find one so readily.
</p>
</Accordion.Content>
</Accordion>
);
}
}

https://codesandbox.io/s/xo226wp5lw?module=example.js

关于javascript - 如何使用语义 UI react 打开多个 Accordion ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55852245/

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