reactjs - 在模态框打开之前进行的 Axios 调用
问题描述
我正在使用引导程序打开一个modal。以前我试图使用布尔值来显示/关闭模式但无法让它工作。这是我试图寻求帮助的 StackOverflow 帖子:
(如何通过在 React 中单击按钮打开 Bootstrap 模式)
下面的代码在用户单击按钮以打开模式以向用户呈现一些数据之前发出 AJAX 请求。
此按钮位于主页中:
<td><button type="button" data-bs-toggle="modal" data-bs-target="#staticBackdrop" onClick={() => rowEvents(id)}>Compare</button></td>
我在主页中包含这个组件,它实际上是在发出 axios 请求:
<ComparisonModal previousWon={previousWon} currentWon={currentWon} />
useEffect(() => {
async function fetchData() {
const content = await client.get('1');
}
fetchData();
}, []);
我对 React 很陌生,有没有更好的方法来做到这一点,以便在用户单击按钮以显示模式之前不会进行 Axios 调用?
解决方案
好吧,你同时有多个问题,我只是做了这个代码沙箱作为例子:https ://codesandbox.io/s/relaxed-benji-8k0fr
回答您的问题:
- 是的,您可以使用布尔值显示模态。基本上会像
{booleanCondition && <MyModal />}
(它包含在代码沙箱中 - 是的,您可以在单击按钮之前执行 axios 请求。在示例中,我们定义了一个函数:
handleClick
然后handleClick
我们做了两件事,getData
这是一个持续 3 秒的模拟请求,并且setShowModal
能够看到模式。
结果将是:
export default function App() {
const [showModal, setShowModal] = React.useState(false);
const [data, setData] = React.useState({});
const getData = async (id) => {
await wait(3000);
setData({ loaded: id });
};
const handleClick = (id) => {
setData({});
setShowModal(true);
getData(1);
};
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
<button onClick={() => handleClick(1)}>Show Modal with Id 1</button>
<button onClick={() => handleClick(2)}>Show Modal with Id 2</button>
{showModal && <Modal data={data} onClose={() => setShowModal(false)} />}
</div>
);
}
推荐阅读
- sql - 如何在子表的外键列中分配新创建的父ID时,将父子数据从一个数据库复制到另一个数据库?
- javascript - 是否可以将 hasClass() 与 querySelectorAll() 一起使用?
- c++ - 拆分窗口Qt
- flutter - 无法安装flutter_mapbox_navigation-0.0.26
- java - 我必须如何调整 json 路径才能使我的测试成功?
- php - TCPDF 如何设置 Zebra 打印机不干胶标签尺寸 2 英寸 X 1 英寸的页面尺寸
- javascript - 如何在使用 Javascript 加载页面期间更改按钮的切换状态?
- javascript - 如何使用我自己的格式将 JSON 对象转换为 javascript 文件
- swift - 在 do-try-catch 中解码到另一个类会产生编译错误
- c# - 在 ASP.NET Core 中首次登录时强制重定向到另一个页面