效果预览
技术要点
当父组件给子组件传递的 JSX 超过一个标签时,子组件接收到的 children 是一个数组,通过解析数组中各 JSX 的属性 slot ,即可实现具名插槽的分发!
代码实现
Father.jsx
import Child from "./Child";export default function Father() {return (<div><Child><h2 slot="title">标题</h2><p slot="content">内容</p></Child></div>);
}
Child.jsx
function Child({ children }) {let slotDic = {};if (Array.isArray(children)) {children.forEach((child) => {let slotName = child.props.slot;if (slotName) {slotDic[slotName] = child;}});}return (<div><h1>子组件</h1>{slotDic.title}{slotDic.content}</div>);
}export default Child;