reactjs - 有没有办法可以从包装的组件更改父状态
问题描述
我正在尝试实现一个下拉包装器。被 DropDownWrapper 包裹的元素预计会通过 onClick 切换下拉的显示。
class DropdownMenuWrapper extends React.Component {
constructor(props) {
super(props);
this.state = {
active: true,
};
this.handleDropDownDisplay = this.handleDropDownDisplay.bind(this);
this.displayDropDownItems = this.displayDropDownItems.bind(this);
}
displayDropDownItems(menuItems, onSelectMenuItem, children) {
return (
menuItems.map(item => (
<a
className={cx('navItem')}
key={item.value}
onClick={() => onSelectMenuItem(children)}
>
{item.logo}
{item.display}
</a>
))
);
}
handleDropDownDisplay() {
this.setState({
active: !this.state.active,
});
}
render() {
const {
className, menuItems, onSelectMenuItem, children, label,
} = this.props;
return (
<div>
{children}
<nav className={className} aria-label={label}>
{this.state.active && this.displayDropDownItems(menuItems, onSelectMenuItem, children)}
</nav>
</div>
);
}
}
export default DropdownMenuWrapper;
在这里,我想在下面的包装按钮上实现下拉切换
<DropdownMenuWrapper
menuItems={[
{ value: 'dashboard', display: 'Dashboard' },
{ value: 'myProfile', display: 'My Profile' },
]}
>
<Button />
</DropdownMenuWrapper>
在这种情况下,有没有办法可以使用 {children} onClick 来更改父组件(DropdownMenuWrapper)的状态?
解决方案
值得庆幸的是,这个问题已经在各种平台上得到了解决,包括这个。我想让你开始:
您可以通过其 props 将父组件中的函数向下传递给子组件,并从那里使用它来更改父组件的状态。
在父组件中定义的函数负责更新父组件的状态。然后子组件必须将函数绑定到发生在子组件中的事件,一旦事件被触发,函数就会发生在父组件中并执行它所实现的更改。
您可以在此处的现有答案中看到详细的代码实现:如何在 React 中更新父级的状态?. 如果这不是您想要的,请原谅我,在这种情况下,您应该让您的问题更清楚。
将来您应该尝试搜索现有的答案,因为问题很有可能已经解决。一个简单的搜索引擎搜索为我完成了这项工作,我喜欢将堆栈溢出标记为搜索查询的一部分,以获得更好的答案。
推荐阅读
- python - conda init zsh 的问题
- javascript - 从 json 响应中将元素添加到 Nextjs 中的列表
- python - Pandas 使用双字符文本限定符读取 csv
- python - 使用 Pandas Group By 将 JSON 列表展平为嵌套结构
- javascript - 如何获取带有 .jsk 扩展名的哈希键?
- google-chrome - 使用 iis 运行 snipe-it 并遇到 crbug/1173575,非 JS 模块文件已弃用问题
- python - Appium:从渲染器接收消息超时:在 Browserstack 中获取旧设备的屏幕截图时为 10.000
- android-studio - 如何通过 wifi-direct 发送应用程序的 recyclerview 列表
- node.js - Nginx Ingress Controller 在带有前缀路由的 Node.js 应用程序中出现错误
- java - 为什么它显示错误':app:checkDebugDuplicateClasses'