react Children 插槽组件 - 项目中遇到的问题

一直想解决react的插槽组件的,这次有机会接触解决这个问题了。
场景是这样的

有一个组件,我想放入两个按钮,但是两个按钮的位置是在组件里面的不同位置的。
我不想把按钮写入到组件里面去,那样方法调用很麻烦

function App() {
const clickOne = () => {
  alert("点击导出按钮");
};
const clickTwo = () => {
  alert("点击导入按钮");
};
  return (
    <div className="App">
      <Contain>
        <Tabs defaultActiveKey="1" onChange={onChange}>
          <TabPane tab="Tab 1" key="1">
            <Box>
             <Button onClick={clickOne}>导出数据</Button>
              <Button onClick={clickTwo}>导入数据</Button>
            </Box>
          </TabPane>
          <TabPane tab="Tab 2" key="2">
            <Box></Box>
          </TabPane>
        </Tabs>
      </Contain>
    </div>
  );
}

Children.count(children) 计算组件的个数

import { Children, useEffect } from "react";
function Contain({ children }) {
  useEffect(() => {
    console.log("Children.count(children)", Children.count(children));
  }, []);
  return (
    <>
      <div>这是容器组件</div>
      {/* {children} */}
      {Children.count(children) > 0 ? children : <div>我是假的组件</div>}
    </>
  );
}

export default Contain;

Children.toArray(children) 属性还是很好用的

import { Tabs } from "antd";
import { Fragment, Children } from "react";
const { TabPane } = Tabs;
function Box({ children, key }) {
  return (
    <Fragment>
      <div tab={`Tab ${key}`} key={key}>
        Content of Tab Pane 1{Children.toArray(children)[0]}
      </div>
      <div>Content of Tab Pane 2 {Children.toArray(children)[1]}</div>
    </Fragment>
  );
}

export default Box;

Children.map()

 <Fragment>
      <div tab={`Tab ${key}`} key={key}>
        Content of Tab Pane 1
        {Children.map(children, (child) => {
          return child;
        })}
      </div>
    </Fragment>

在这里插入图片描述
Children.map 和Children.forEach一样的效果,只是方法不同

  {
          Children.map(children, (child) => {
            return child;
          })[0]
        }
        {
          Children.map(children, (child) => {
            return child;
          })[1]
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值