reactjs - 在原子组件之间传递元素/引用的规范 React-Redux 方法是什么?
问题描述
我试图从使用本地 React 钩子将信息存储在 Redux中抽象出这个示例的一部分。
特别是,需要指定弹出菜单anchorEl
才能锚定到父级<HTMLElement>
进行定位。上面来自 MaterialUI 的示例实现了useState
用于存储和更改此属性的挂钩:
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
当我尝试将其转换为 Redux 时,
dispatch(accountMenuSlice.actions.setAnchorEl(event.currentTarget));
它最终试图存储不可序列化的<HTMLElement>
,这是不可取的,产生以下警告/错误
react_devtools_backend.js:2430 A non-serializable value was detected in an action, in the path: `payload`.
Value: <button>…</button>
Take a look at the logic that dispatched this action:
{type: "ACCOUNT_MENU_KEY/setAnchorEl", payload: button.MuiButtonBase-root.MuiIconButton-root.MuiIconButton-colorInherit.MuiIconButton-edgeEnd}
在原子组件之间传递元素/引用而不将抽象提升到父组件的规范 React-Redux 方法是什么?
解决方案
我最终只是使弹出框成为按钮的子项,并且非常干净:
// AccountButton.tsx
export default function AccountButton() {
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
const handleAccountMenuOpen = (event: React.MouseEvent<HTMLElement>) => {
setAnchorEl(event.currentTarget);
};
return (
<>
<IconButton
edge="end"
aria-label="account of current user"
aria-controls="primary-search-account-menu"
aria-haspopup="true"
onClick={handleAccountMenuOpen}
color="inherit"
>
<AccountCircle />
</IconButton>
<AccountMenu anchorEl={anchorEl} setAnchorEl={setAnchorEl} />
</>
);
}
和
// AccountMenu.tsx
export default function AccountMenu(props: {
anchorEl: HTMLElement;
setAnchorEl: React.Dispatch<React.SetStateAction<HTMLElement>>;
}) {
const { anchorEl, setAnchorEl } = props;
...
}
推荐阅读
- mongodb - Spock:模拟 mongodb 批量更新,数组比较失败
- pine-script - 代码之间的时区转换
- java - Spring Boot 中的自签名证书和 SSL
- sql - 为什么 STATISTICS_NORECOMPUTE 会自行开启?
- ruby-on-rails - Rails gem resque-loner NameError(未初始化的常量 Resque::Plugins::UniqueJob)
- python - 在 python 中关闭异步服务器时出错
- excel - 每次使用 CommandButton_click 选择不同的单元格
- r - 使用 Reversible-Jump MCMC 贝叶斯方法在 R 中更改点包
- javascript - 如何降低画布动画的速度?
- python-3.x - 在声明 typing.NamedTuple 对象时提供额外的约束