react 插槽传参

react中其实没法直接给插槽传递参数,只能借助一点技术手段:函数。

这种方式有个专有名词叫:render-props。

render-props的具体的方式就是,子组件作为插槽是用函数的形式,而容器组件渲染的时候对应的就调用这个函数,在调用函数的时候,把需要传递的参数传入函数,这样在插槽函数的作用域内就拿到了数据:

() => {
  return ( 
    <MainComp>
      {
        (data) => (<Staff staff={data} />)
      } 
    </MainComp>
  )
}

看下容器MainComp组件:

const MainComp = (props) => {

  const [data, setData] = useState({})
  useEffect(() => {
    const info = await getData()
    setData(info)
  }, []) 
  return (
    <div>
      {
        props.children && props.children(data)
      }
    </div>
  )
}

当然了,这种函数形式的“插槽”不止可以用作插槽,用在普通的props上自然也是可以的。在react世界里,凡是要从另一个组件拿数据的场合,都可以考虑传个函数:

() => {
  return (
    <MainComp
      staff={(data) => (<Staff staff={data} />)}
    />
  )
}

对应的MainComp,最终也是通过函数调用给子组件传递参数,只是获取子组件的方式换一下:

const MainComp = (props) => {
  const [data, setData] = useState({})
  useEffect(() => {
    const info = await getData()
    setData(info)
  }, []) 
  return (
    <div>
      {/* 这里变一下 */}
      {
        props.staff && props.staff(data)
      }
    </div>
  )
}
posted @ 2022-11-07 14:23  yunChuans  阅读(335)  评论(1编辑  收藏  举报