单个插槽

  • 子组件 ``jsx import React from "react"; import { PropTypes } from "prop-types"; import "./index.less"; const Title = (props) => { const { className, text, children } = props; return ( <div className={title-container Title- ${className}`}>
    1. <p className="text">{text}</p>
    2. {/* 此处是由父组件传过来的插槽 */}
    3. {children}
    ); };

// 规定props的数据类型 Title.propTypes = { className: PropTypes.string, text: PropTypes.string, children: PropTypes.array, };

Title.defaultProps = { className: “”, text: “预警信息展示”, children: [], };

export default Title;

  1. - 父组件
  2. ```jsx
  3. import React from "react";
  4. import Title from "@/components/Title";
  5. export default class LeftTop extends React.Component {
  6. constructor(props) {
  7. super(props);
  8. this.state = { date: new Date() };
  9. }
  10. render() {
  11. return (
  12. <div className="left-top-container">
  13. <Title>
  14. {/* 传入两个插槽内容 */}
  15. <div className="other">其余内容</div>
  16. <div className="other2">其余内容</div>
  17. </Title>
  18. </div>
  19. );
  20. }
  21. }
  • 效果

image.png

限定插槽

限制传入的子元素的展示位置

  1. //这是一个数组 会直接把三个div直接显示在子组件中
  2. {this.props.children}
  3. //只是把这个children数组第一个元素放到子组件中
  4. {this.props.children[0]}
  5. //这是通过filter筛选出指定自定义属性的名称来放入到子组件中
  6. {this.props.children.filter(itme => itme.props.name=="header")}

给组件限定 header main footer 三个位置的插槽

  1. <Title>
  2. <div name="header">Hello World!</div>
  3. <div name="main">Hello World!</div>
  4. <div name="footer">Hello World!</div>
  5. </Title>