javascript - 如何将 Prop 传递给组件的 child

标签 javascript reactjs

const ListView = () => {
  return(
    <ul>
      <ListItem modal={<Modal />} />
    </ul>
  )
};

const ListItem = (props) => {
  const [visible, setVisible] = useState(false);
  const toggle = () => setVisible(!visible)

  return (
    <>
      <li>
        ListItem 
      </li>
      <ModalWrapper toggle={toggle}>{props.modal}</ModalWrapper>
    </>
  )
}

const ModalWrapper = (props) => {
  if(!props.visible) return null;
  return (
    <>
      {props.children}
    </>
  )
}

const Modal = ({ toggle }) => {
  /* I would like to use toggle() here. */
  return (
    <>
      <div onClick={toggle} className="dimmer"></div> 
      <div className="modal">modal</div>
    </>
  )
}

我有一个函数 toggle()<ListItem />如上所示。

我正在努力使用 toggle()<Modal /> .

是否可行或有什么建议?

最佳答案

您需要将 toggle 注入(inject)到 ModalWrapper children,注意不要覆盖 Modal 上的 toggle 属性

const ModalWrapper = ({ children, visible, toggle }) => {
  const injected = React.Children.map(children, child =>
    React.cloneElement(child, { toggle })
  );
  return <>{visible && injected}</>;
};

引用React.cloneElementReact.Children.map .

演示:

Edit SO-Q-56529259

关于javascript - 如何将 Prop 传递给组件的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56529259/

相关文章:

javascript - 如何在angular的$http中添加ajax的dataType属性?

javascript - Jquery - 从元素中提取和修改文本

Django 表单与 ReactJS

javascript - 文本未换行并且正在获取屏幕 react native

javascript - 在 react 组件中开 Jest 模拟异步调用

javascript - 使用 Spring Boot API 的 React Admin 中的 X-Total-Count 缺少 header 错误

javascript - Javascript 的 'delete()' 是否已弃用?

javascript - 为什么使用react-redux时props未定义?

javascript - 如何替换除第一个字符之外的多个字符?

javascript - 如何在reactjs中设置setInterval