06-react插槽实现

24 阅读1分钟

两种方式:组件children 和 props

组件children

  • 使用组件的时候,双标签,内部加入react element元素
  • 定义组件的时候,内部通过this.props.children获取插槽元素

原理: 组件使用的时候,双标签引入,并添加子元素,实质上,调用了React.createElement('NavBar', config, children),其中childern会在组件本身通过props.children获取。再来说下props.children,如果有多个,那么是array类型,如果是一个,那么是reactElement类型。

demo

效果

image.png

组件定义

image.png

组件使用

image.png

评价children方式

缺点: 由于props.children取决于外层传入个数的影响,类型为数组和react element导致内部处理要通过类型作区分。并且,组件定义的时候要严重依赖索引。如下:

image.png children长这样

image.png

props

  • 使用组件的时候,单标签即可,将属性通过props属性传递进去
  • 定义组件的时候,render函数JSX中获取this.props作为内容渲染【内容可以是字符串,也可以是react element】

demo

效果

image.png

组件定义

image.png

组件使用

image.png

评价props

好处: 比children严重依赖索引的更方便,且灵活,外层传递可以随便定义参数,可以是字符串,变量,react element.这种方式开发中用的比较多

补充:作用域插槽

概念:数据子组件提供,内容渲染由父组件确定

demo

改进这个TabBar,TabBar内部逻辑没变,app.jsx决定展示形式。例如;流行展示span,新歌展示button,精选这是你和斜体i image.png

解决思路 组件使用时,通过props传递一个回调函数,父组件定义回调函数【接受item参数展示逻辑】。组件定义的时候,调用父亲回调

子组件 image.png

父组件

image.png

image.png