【React入门总结03】react“插槽”实现

229 阅读2分钟

react官网链接 : zh-hans.react.dev/ ;

在开发中,我们抽取了一个组件,但是为了让这个组件具备更强的通用性,我们不能将组件中的内容限制为固定的 div、span等等这些元素。我们应该让使用者可以决定某一块区域到底存放什么内容。这种需求在Vue当中有一个固定的做法是通过 slot 来完成的, React 呢? React 对于这种需要插槽的情况非常灵活,有两种方案可以实现:

方案一 : children属性

每个组件都可以获取到 props.children:它包含组件的开始标签和结束标签之间的内容。

父组件传递元素

image.png

子组件接收,并且通过索引取相应的结构

image.png

image.png

不过这种方式有一个弊端,通过索引值获取传入的元素很容易出错,当元素过多时,不能精准的获取传入的原生元素结构。

另外,当传递元素只有一个时,不能在通过索引获取结构,因为此时props.children不再是一个数组,而是一个对象。

image.png

image.png

image.png

方案二:props

通过具体的属性名,可以让我们在传入和获取时更加的精准

父组件

image.png

子组件接收使用

image.png

这种方式避免了通过索引获取的不精准性,准确率更高。

作用域插槽

组件的作用域插槽:(既父组件传递给子组件不同的标签,而标签里面的动态数据需要从子组件的变量获取。这时候父组件获取不到子组件变量就需要使用作用域插槽)

在react中作用域插槽需要通过父组件传递给子组件函数的形式来完成。

具体可看下面案例:

第一步:父组件向子组件传递一个函数

image.png

第二步:子组件渲染时调用父组件传递的函数,并传递相应数据参数

image.png

第三步: 父组件拿到子组件传递过来的数据,可进行逻辑判断和操作,并返回相应元素结构

image.png

第四步:子组件渲染不同结构

image.png

实际情况中可进行更加复杂的逻辑判断操作。