javascript - 在 Reactjs 中,子级无法触发属于父级的函数
问题描述
我有一个模态父组件和一个表单子组件。打开和关闭模态框的功能在父级中,而提交功能在子级中。我想要做的是在提交时关闭模态,但为此我需要来自子级的提交函数来触发来自父级的关闭模式函数。我知道如何从 to 传递一个函数< Parent />
,< Child />
但在这里不同的是,孩子以这种形式在父母中返回{children}
。当孩子以这种形式返回时,我该怎么做?
这是模态组件或父组件:
<ModalInMobile
id="SearchFiltersMobile.filters"
isModalOpenOnMobile={this.state.isFiltersOpenOnMobile}
onClose={this.cancelFilters}
showAsModalMaxWidth={showAsModalMaxWidth}
onManageDisableScrolling={onManageDisableScrolling}
containerClassName={modalContainerStyles}
closeButtonMessage={modalCloseButtonMessage}
>
<button className={showListingsButtonStyles} onClick={this.closeFilters}>
X
</button>
{this.state.isFiltersOpenOnMobile ? (
<div className={modalFilterWrapperStyles}>{children[this.state.renderingModals]}</div>
) : null}
</ModalInMobile>
解决方案
您可以使用 cloneElement 将您的道具传递给您的孩子。
export default function App() {
return (
<div className="App">
<Parent>
<Child />
</Parent>
</div>
);
}
const Child = ({ parentProps }) => {
return (<div>I am a child ({parentProps})</div>)
}
const Parent = ({ children }) => {
const iAmProps = "i am a prop"
const childProps = React.Children.map(children, child => {
if (React.isValidElement(child)) {
return React.cloneElement(child, { parentProps: iAmProps }); //add your props here.
}
return child;
});
return ( <>{childProps}</>)
}
推荐阅读
- php - 如何在 docker 容器中安装和配置 Apache、PHP 和 MySQL
- unicode - 将源映射用于非 JS 语言时,源映射行/列定义中的任何细微之处
- google-analytics - 使用测量协议和非交互式时丢失大量事务
- python - 调试浮士德流处理 - 从主题开始重新启动应用程序
- tfs - 我如何列出我所有的评论或至少我工作过的 WI?
- go - 什么时候应该显式调用 os.File.Close()?
- flutter - 页面重建时颤振重建底部导航栏
- reactjs - 在 reactJS 中将值列表作为参数传递
- php - 编辑配置文件laravel 7未定义变量中的错误密码更改
- go - 如何为多个环境和突变的组合生成配置