gpt4 book ai didi

reactjs - 在 React 中使用模态的项目列表上打开模态

转载 作者:行者123 更新时间:2023-12-05 04:44:32 25 4
gpt4 key购买 nike

我有一个项目列表,列表中的每个项目都有一个打开模式的按钮。

我的问题是我认为我做错了什么,因为当我点击“打开模式”时它不起作用。我已经让它工作了,但它同时打开所有模式,我找不到如何修复它。

这是我的沙箱,里面有所有代码:https://codesandbox.io/s/modal-on-list-sjw7u?file=/src/components/TopBar.tsx

我的项目列表在沙盒上的类 MetricsDetailsPage 中,我在这个类上称为模态的部分是这样完成的:

<FiltersAddition
dimension={dimension}
isModalOpen={isShowing}
toggle={toggle}
/>
<Button onClick={toggle}> Instantiate </Button>

我的问题是,如果您在我的代码沙箱上打开“https://sjw7u.csb.app/metric/test”并单击“实例化”按钮,您将看到列表,我只想显示被点击项目的模态(一次一个)。

enter image description here

最佳答案

将来,宁愿在问题中包含相关的、有问题的代码。

问题是您在每次迭代中都包含模态,并且没有父状态来控制一次显示哪个模态。

我建议您修改钩子(Hook)并从共享父状态使用它:

import { useState } from 'react';
import { IDimension } from '../model/metric';

const useModal = () => {
// store which has been selected
const [selected, setSelected] = useState<IDimension>();
const [isShowing, setIsShowing] = useState<boolean>(false);

const open = (dimension: IDimension) => {
setSelected(dimension);
setIsShowing(true);
};

const close = () => {
setSelected(null);
setIsShowing(false);
};

return {
isShowing,
open,
close,
selected
};
};

export default useModal;

然后将模态框移出循环:

          <TableBody>
{metric?.dimensions.map((dimension) => (
<TableRow key={dimension.name}>
<TableCell>{dimension.name}</TableCell>
<TableCell>{dimension.value_type}</TableCell>
<TableCell>{dimension.doc ? dimension.doc : 'No description available'}</TableCell>
<TableCell>
<Button onClick={() => open(dimension)}> Instantiate </Button>
</TableCell>
</TableRow>
))}
</TableBody>
</Table>
{/* outside the loop */}
<FiltersAddition dimension={selected} isModalOpen={isShowing} close={close} />

Modified Codesandbox Demo

关于reactjs - 在 React 中使用模态的项目列表上打开模态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69352784/

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