【问题标题】:How to get vue slot property in JSX?如何在 JSX 中获取 vue 插槽属性?
【发布时间】:2020-12-30 08:32:16
【问题描述】:

我写了一个使用模板语法的子组件,子组件有一个将'item'属性传输给父组件的槽,但是父组件使用JSX语法,现在我很难在JSX中获取'item'属性。任何帮助将不胜感激!

// child.vue
<template>
  <Autocomplete>
    <template slot-scope="{ item }">
      <slot :item="item" />
    </template>
  </Autocomplete>
</template>
// parent.vue
export default {
  render () {
    return (
      <Child>
        <template slot-scope='{item}'>
          <span>{item}</span> // item is not defined 
        </template>
      </Child>
    )
  }
}

【问题讨论】:

    标签: vue.js jsx slot


    【解决方案1】:

    您可以使用 default 函数(代表默认插槽)将插槽作为 scopedSlots 道具(Vue 2)传递。请注意,对于非默认命名槽(例如,"mySlot",如示例中所示),这尤其需要:

    export default {
      render() {
        return (
          <Child
            {
              ...{
                scopedSlots: {
                  default: ({ item }) => <span>{ item.foo }</span>,
                  mySlot: ({ myProp }) => <h1>{ myProp }</h1>,
                }
              }
            }
          />
        )
      }
    }
    

    或者您可以在 &lt;Child&gt; 正文中传递默认插槽渲染方法:

    export default {
      render() {
        return (
          <Child>
            { ({ item }) => <span>{ item.foo }</span> }
          </Child>
        )
      }
    }
    

    【讨论】:

      【解决方案2】:

      你可以试试这个吗?

      // child.vue
      <template>
        <Autocomplete>
          <template v-slot="{ item }">
            <slot :item="item" />
          </template>
        </Autocomplete>
      </template>
      

      并且在父组件中:

      // JSX
      {
        render () {
          return (
            <Child>
              <template v-slot="{ item }">
                <span>{{item}}</span> // item is not defined 
              </template>
            </Child>
          )
        }
      }
      

      【讨论】:

      • 这种方式也不行,JSX中的'item'属性未定义,谢谢。
      猜你喜欢
      • 2022-06-29
      • 2021-12-02
      • 1970-01-01
      • 2018-10-24
      • 2021-02-27
      • 2019-08-07
      • 2020-12-05
      • 2021-02-06
      • 2019-06-08
      相关资源
      最近更新 更多