我需要使用 Redux 吗?
不,绝对不是
如何实现该功能? [...] 或者是否有某种用于确认对话框的库?
听起来你已经在那里了。而不是console.log()确认,做这件事!我所说的“那个东西”指的是类似这样的东西......
handleConfirm = () => {
this.setState({loading: true}); // show loading icon
deleteItem(id)
.then(() => {
this.setState({
loading: false, // hide loading icon
success: true, // show colored success text
});
}
.catch((err) => {
// handle delete error here
}
}
你的渲染函数看起来像这样......
render() {
const { loading, success } = this.state;
return (
{loading && <Loading />}
{success && <SuccessMessage />}
{!loading && !success && <ConfirmMessageWithButtons />}
)
}
更新:我看到您现在已经在代码沙箱上提供了代码,所以这里有一个使用您的代码的笨拙的解决方案。它很笨拙,因为它使用 setTimeouts 模拟异步操作
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import Modal from './components/Modal';
class App extends Component {
constructor(props) {
super(props);
this.state = {
isOpen: false,
loading: false,
success: false,
};
}
toggleModal = () => {
this.setState({
isOpen: !this.state.isOpen,
});
};
approveModal = () => {
this.setState({loading: true });
setTimeout(() => this.setState({
loading: false,
success: true
}), 1000)
setTimeout(() => this.setState({
isOpen: false
}), 3000)
};
render() {
const { loading, success } = this.state;
return (
<div className="App">
{!success && !loading && <p>Item to delete</p>}
<button onClick={this.toggleModal}>Delete</button>
<Modal show={this.state.isOpen} onApprove={this.approveModal} onClose={this.toggleModal}>
{loading && "Loading..."}
{success && "Success (make me green)"}
{!success && !loading && "Here's some text for the modal"}
</Modal>
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById('root'));
这是一个链接https://codesandbox.io/s/10o12zzk63