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]
}
