javascript - 根据点击事件显示 React 组件
问题描述
我正在尝试根据在 React 中传递按钮文本的单击事件来呈现两个不同的组件。我知道在函数中怎么做,但是如何根据点击事件渲染 DOM 元素呢?到目前为止,我有:
const Popup: React.FunctionComponent = () => {
const [visible, setVisible] = React.useState<boolean>(false);
const toggleDialog = (e: React.MouseEvent<HTMLButtonElement>) => {
if (e.currentTarget.textContent === 'Primary') {
setVisible(!visible);
console.log(e.currentTarget.textContent);
return (
<div>
<p>{e.currentTarget.textContent}</p>
</div>
)
} else {
console.log(e.currentTarget.textContent);
setVisible(!visible);
return (
<div>
<p>{e.currentTarget.textContent}</p>
</div>
)
}
};
const closeDialog = () => {
setVisible(false);
};
return (
<>
<Button variant="primary" onClick={toggleDialog}>Primary</Button>
<Button variant="secondary" onClick={toggleDialog}>secondary</Button>
{visible && <Dialog title={"Please confirm"} onClose={closeDialog}>
{toggleDialog}
<DialogActionsBar>
<button className="button" onClick={toggleDialog}>No</button>
<button className="button" onClick={toggleDialog}>Yes</button>
</DialogActionsBar>
</Dialog>}
</>
)
}
export default Popup;
解决方案
最后我这样做了:
const [visible, setVisible] = React.useState<boolean>(false);
const [content, setContent] = React.useState<string>('Primary');
const toggleDialog = (e: React.MouseEvent<HTMLButtonElement>) => {
setVisible(!visible);
if (e.currentTarget.textContent === 'Primary') {
setContent('Primary');
} else {
setContent('Secondary');
}
};
const closeDialog = () => {
setVisible(false);
};
return (
<>
<Button variant="primary" onClick={toggleDialog}>Primary</Button>
<Button variant="secondary" onClick={toggleDialog}>Secondary</Button>
{visible && <Dialog title={"Please confirm"} onClose={closeDialog}>
{content === 'Primary' && (
<p>This is the first component</p>
)}
{content === 'Secondary' && (
<p>This is the second component</p>
)}
<DialogActionsBar>
<p>Content action bar</p>
</DialogActionsBar>
</Dialog>}
</>
)
};
推荐阅读
- postgresql - 带有子查询的 postgres case 语句
- ruby-on-rails - 如何修复 Rails 生产服务器中的 504 nginx 网关超时?
- rust - 克隆请求响应
- django - 通过侧边栏菜单项调用此表单时,从数据库模型填充 Django 表单字段标签
- angular - 在angular/typescript中根据id新建数组
- npm - Webpack CopyPlugin : 添加文件到插件目录
- android - 在改造 android 中使用身份验证器刷新访问令牌
- shopware - Shopware:无法创建变体“(中间值).map 不是函数”
- rust - 如何将同一项目的 Makefile 和 vcxproj 合并到一个 CMakeList 中?
- r - 分位数回归:如何在一张图上为 2 个不同组绘制所有分位数