reactjs - 如果服务器返回错误,如何取消选中开关?
问题描述
我有一个来自 Material UI 的基本切换器。
它有 onChange 事件,并且已选中/未选中。它还在更改时向服务器发送请求。
我想不通的是,如果我对服务器的请求发回了错误,如何取消选中它。
我对后端的请求是一个 redux 操作,它调用redux-logic
所以我不能链接.then
或.catch
我正在使用 Redux,所以我想我可以在那里存储成功/不成功的请求,但我不确定如何在组件中使用它?
解决方案
switch
查看您的示例代码,您需要根据 API 调用的结果来决定是否切换状态。这意味着在您的handleChange
方法中,您应该在切换状态之前调用 API,如果 API 调用失败,则不要更改开关的状态(并向用户提供一些失败的通知)。
我已经使用模拟 API 调用扩展了您的沙箱,以演示它是如何工作的(有很多方法可以做到这一点)。在mockApiCall
我的示例中,将随机返回true
or false
,因此您可以看到它如何处理这两种情况。只需将 my 替换mockApiCall
为通过 redux 调度操作,但前提应该几乎相同。 工作示例沙箱。
关键是修改你的handleChange
类似如下:
handleChange = async () => {
this.setState({ busy: true });
//REQUEST TO THE SERVER
const result = await this.mockApiCall(1000);
if (result === true) {
console.log("Api Call Success");
this.setState({ busy: false, switch: !this.state.switch });
} else {
console.log("Api Call Fail");
this.setState({ busy: false });
}
};
你可以看到我已经busy
在状态中添加了一个属性来跟踪 API 调用何时进行。此外,您可以在忙时禁用开关,如下所示:
render() {
return (
<div>
<Switch
disabled={this.state.busy}
checked={this.state.switch}
onChange={this.handleChange}
/>
{this.state.busy && <span>Working...</span>}
</div>
);
}
上面的沙箱有,mockApiCall
所以你可以看到整个工作。
推荐阅读
- delphi-10.4-sydney - 本机 IDE 调用堆栈窗口在崩溃时始终为空
- sql - 将列更新为重复
- javascript - DataTables - 高级搜索/列过滤器?
- firebase - 如何在 Firestore 数据库中建模这种情况?
- awk - 将两列合并为新列并打印所有列
- php - 如何在functions.php中获取数据
- python - pygame - while循环使pygame窗口冻结/我如何将子弹射出玩家?
- javascript - 使用 JavaScript 我想要以下输出
- ios - SwiftUI 将 Label 的垂直对齐方式更改为居中图像和文本
- javascript - 猫头鹰轮播导航效果