在React中使用useReducer打开/关闭多个对话框的正确方法可以通过以下步骤实现:
下面是一个示例代码:
import React, { useReducer } from 'react';
// 定义动作类型
const OPEN_DIALOG = 'OPEN_DIALOG';
const CLOSE_DIALOG = 'CLOSE_DIALOG';
// 定义reducer函数
const reducer = (state, action) => {
switch(action.type) {
case OPEN_DIALOG:
return { ...state, [action.payload]: true }; // 设置对话框状态为true
case CLOSE_DIALOG:
return { ...state, [action.payload]: false }; // 设置对话框状态为false
default:
return state;
}
};
const DialogManager = () => {
// 初始化状态
const [state, dispatch] = useReducer(reducer, {
dialog1: false,
dialog2: false,
// 添加更多对话框...
});
// 打开对话框
const openDialog = (dialog) => {
dispatch({ type: OPEN_DIALOG, payload: dialog });
};
// 关闭对话框
const closeDialog = (dialog) => {
dispatch({ type: CLOSE_DIALOG, payload: dialog });
};
return (
<div>
<button onClick={() => openDialog('dialog1')}>打开对话框1</button>
<button onClick={() => closeDialog('dialog1')}>关闭对话框1</button>
{/* 添加更多按钮以及对话框 */}
{state.dialog1 && <Dialog1 onClose={() => closeDialog('dialog1')} />}
{state.dialog2 && <Dialog2 onClose={() => closeDialog('dialog2')} />}
</div>
);
};
const Dialog1 = ({ onClose }) => {
return (
<div>
<h1>对话框1</h1>
<button onClick={onClose}>关闭</button>
</div>
);
};
const Dialog2 = ({ onClose }) => {
return (
<div>
<h1>对话框2</h1>
<button onClick={onClose}>关闭</button>
</div>
);
};
export default DialogManager;
这个例子中,我们使用了useReducer来管理对话框的状态,并且定义了OPEN_DIALOG和CLOSE_DIALOG两个动作。在DialogManager组件中,根据状态来显示或隐藏对话框,并通过按钮的点击事件来触发打开或关闭动作。每个对话框组件都接收一个onClose回调函数,用于关闭对话框。
请注意,以上示例中未提供任何腾讯云相关产品和产品介绍链接地址,如有需要,请提供具体的腾讯云产品要求,我将尽力给出相关的推荐和链接。
领取专属 10元无门槛券
手把手带您无忧上云