react 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;
复制代码

 

posted on   sss大辉  阅读(72)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示