1. 前言
slot
插槽 在vue
里就常用
react
的插槽其实也一样还是模拟一个消息框 类似
elemetui
或者iview
message
组件的形式
2. 不用插槽之前
核心代码
function Message(props) { return ( <div className="msgBox"> <div> {props.txt} <span> x </span> </div> </div> ) } ReactDOM.render((<div> <Message txt="这是一个消息提示" /> </div>), app)
简单样式
.msgBox { background-color: #67C23A; padding: 5px 20px; color: #FFF; border-radius:5px; } .msgBox span{ float:right; color: #DCDFE6; }
简易效果
1.png
3.slot
注意看看这个 参数
props
function Message(props) { console.log("瞅瞅这个props 到底是啥:",props) return ( <div className="msgBox"> <div> {props.children} <span> x </span></div> </div> ) } ReactDOM.render((<div> <Message> 这确实是个消息提示 </Message> </div>), app)
props
1.png
不加标签 直接就是 字符串内容 {children: "XXXXX "}
4. 一个标签
核心代码
function Message(props) { console.log("瞅瞅这个props 到底是啥:",props) return ( <div className="msgBox"> <div> {props.children} <span> x </span></div> </div> ) } var title = "这是个消息" ReactDOM.render((<div> <Message><p>{title}</p></Message> </div>), app)
props
1.png
单个标签是对象 {children: {…}}
5. 多个标签
核心代码
function Message(props) { console.log("瞅瞅这个props 到底是啥:",props) return ( <div className="msgBox"> <div> <h1> {props.children[0]}</h1> {props.children[1]} <span> x </span> </div> </div> ) } var title = "温馨提示" ReactDOM.render((<div> <Message> <p>{title}</p> <p> 这是一个好消息</p> </Message> </div>), app)
界面效果 以及
props
1.png
多个是数组 {children: Array(2)}
6. children自动展开
如果不需要额外的样式,可以直接写, 因为这个数组在
react
里会自动展开
function Message(props) { console.log("瞅瞅这个props 到底是啥:",props) return ( <div className="msgBox"> <div> {props.children} <span> x </span> </div> </div> ) }
7.总结
children 不加标签 直接就是 字符串内容 {children: " xxx "} 单个标签是对象 {children: {…}} 多个是数组 {children: Array(2)}