React 中 Render Props 怎么在 Vue 里实现类似效果?
最近在用 Vue 3 写组件,想复用一些逻辑,听说 React 里可以用 Render Props 模式。但我试了下不知道怎么在 Vue 里模拟类似的行为。比如我想让子组件决定怎么渲染父组件传下来的数据,但又不想用 slot-scope(因为逻辑比较复杂)。
我试着写了个组件,但感觉不太对,数据传不进去或者渲染不出来。下面是我写的简单例子:
<template>
<div>
<DataProvider v-slot="{ data }">
<p>{{ data.message }}</p>
</DataProvider>
</div>
</template>
<script setup>
import DataProvider from './DataProvider.vue'
</script>
是不是 Vue 根本不需要 Render Props?还是我用法错了?
你提到的
下面是一个简单的例子:
{{ data.message }}
然后在你的 DataProvider.vue 文件里,你需要这样写:
这样,DataProvider 就会把 providerData 作为 data 属性传递给使用它的组件,你就可以在插槽里访问到它了。这种方式既能复用逻辑,又能保持组件的灵活性,我觉得比直接搬用 Render Props 更合适 Vue。希望这能帮到你,踩过这种坑的感觉确实挺折磨人的。