首页 > 其他分享 >props和插槽

props和插槽

时间:2024-04-07 11:46:21浏览次数:22  
标签:name 插槽 React handleEmit props 组件

1.父子传值、插槽都是基于props

2.在react里父组件给组件传值跟具名插槽并无区别

3.子组件给父组件传值,也是利用props上定义方法,子组件拿到这个方法并传值

4.默认插槽,在子组件通过props.children获取

5.作用域插槽是通过父组件定义一个方法执行,子组件拿到这个方法并传值

import styles from './index.less';
import React from 'react';
import Son from './components/son'
import { useState } from 'react'
let data = {
  a: 'props参数',
  b: <div>我是具名插槽</div>
}
function defaultCc() {
  return <div>我是默认插槽</div>
}
function handleEmit(val: string) {
  console.log(val)
}
const HomePage: React.FC = () => {
  class Cc extends React.Component {
    state = {
      ...data
    }
    render() {
      return <div>
        <h3>class组件</h3>
        <Son a={this.state.a} b={this.state.b} scopeslot={(scope) =>
        // (<div>{scope.name}</div>)
        (
          scope.map((item, index) => {
            return <div key={index}>作用域插槽:{item.name}</div>
          })
        )
        } handleEmit={handleEmit}>
          {defaultCc()}
        </Son>
      </div>
    }
  }
  let [a, setA] = useState(data.a)
  let [b, setB] = useState(data.b)
  return (
    <div className={styles.container}>
      <h2>props和插槽</h2>
      <h3>函数组件</h3>
      <Son a={a} b={b} scopeslot={(scope) =>
      // (<div>{scope.name}</div>)
      (
        scope.map((item, index) => {
          return <div key={index}>作用域插槽:{item.name}</div>
        })
      )
      } handleEmit={handleEmit}>
        {defaultCc()}
      </Son>
      <Cc></Cc>
    </div>
  );
};



export default HomePage;

 

import { Button } from 'antd';
import { useState } from 'react'
interface MyObject {
  name: string;
}
interface Props {
  a: string;
  b: React.ReactNode;
  children?: React.ReactNode;
  scopeslot?: (scope: MyObject[]) => React.ReactNode;
  handleEmit: (param: string) => void;
}
const Son: React.FC<Props> = (props) => {
  console.log(props)
  let [msg, setMsg] = useState([{
    name: '1',
  }, {
    name: '2',
  }, {
    name: '3',
  }])
  return <div>
    <Button type="primary" size="small">son组件</Button>
    <div>{props.a}</div>
    <div>{props.children}</div>
    <div>{props.b}</div>
    <div>{props.scopeslot?.(msg)}</div>
    <Button type="primary" size="small" onClick={() => {
      props.handleEmit('给父组件传值')
    }}>给父组件传值</Button>
  </div>
};
export default Son;

 

标签:name,插槽,React,handleEmit,props,组件
From: https://www.cnblogs.com/ssszjh/p/18118746

相关文章

  • Vue2和3中的插槽区别及其简单案例
    vue中的插槽是什么,官方解释是:Vue实现了一套内容分发的API,这套API的设计灵感源自WebComponents规范草案,将<slot>元素作为承载分发内容的出口......vue2插槽和vue3插槽基本概念是一致的,也是匿名插槽、具名插槽、作用域插槽三种,只是基础语法有一些区别。下面让我们温习......
  • 监听 watch props对象属性监听 或深度监听
    对象属性监听 props:{baseFormObj:Object,},watch:{'baseFormObj.measuresItems':{immediate:true,//如果需要组件创建时立即监听,设置为truehandler(newVal,oldVal){//当myProperty变化时,这里的代码会被执行}......
  • EL虚拟化表格 用h函数自定义表头并且指定插槽
    第一次使用el-table-v2,需要实现点击表头弹框来展示数据,官方文档中只有tsx的写法,没有使用h函数的写法,因此记录一下先看下最终的效果以下是部分代码import{ElButton,ElRadio,ElTooltip,ElPopover }from'element-plus'; //columns是一个数组,里面的值为每一列的配置......
  • Extraneous non-props attributes (title) were passed to component but could not b
    大概意思就是给子组件传递的属性,由于子组件呈现片段或文本根节点,无法自动继承;就是"透传Attributes"。对于多根节点的组件没有自动attribute透传行为;如果$attrs没有被显式绑定,将会抛出一个运行时警告。解决方式:手动显示绑定$attrs(1)模板 <template> <h1>多根节点的At......
  • 深入理解 React 中的 children props 和 render props
    深入理解React中的childrenprops和renderprops在React中,childrenprops和renderprops是两种常见的组件复用模式,它们都可以帮助我们更好地组织和复用组件代码。虽然它们的实现方式有所不同,但都能够有效地实现组件之间的数据传递和功能共享。childrenpropsch......
  • vue props中定义属性
     vue在props中定义单个属性属性类型为布尔props:{ visible:Boolean,}, 定义单个属性类型为数字或者字符串,并添加默认内容props:{ aType:{ type:[String,Number], default:1 } },  vue 在props中定义多属性对象例如定义formValidate......
  • Vue学习笔记57--vue默认插槽 +
    vue默认插槽示例一:不使用插槽Category.vue<template><divclass="category"><h3>{{title}}</h3><ul><liv-for="(item,index)inlistData":key="index">{{item}}</li>......
  • 前端学习-vue学习012-插槽
    官方教程链接父组件还可以通过插槽(slots)将模板片段传递给子组件:App.vue<scriptsetup>import{ref}from'vue'importChildCompfrom'./ChildComp.vue'constmsg=ref('fromparent')</script><template><ChildComp>{{msg......
  • Vue3 Slot—插槽全家桶使用详解
    插槽是什么插槽slot就是子组件中提供给父组件使用的一个占位符,用<slot></slot>表示,父组件可以给这个占位符内填充任何模板代码,填充的内容会自动替换<slot></slot>标签。插槽被分为三种:匿名插槽、具名插槽、作用域插槽。1、匿名插槽没有名字的插槽就是匿名插槽,组件可以放......
  • 微信小程序(插槽)
        ......