React第五节 组件三大属性之 props 用法详解

组件的三大属性
1、props 详情
2、state 详情
3、refs 详情

特性

a、props最好是仅限于父子上下级之间的数据传递,如果是祖孙多级之间传递属性,可以考虑使用props是否合适,或者使用替代方案 useContext() 或者使用 redux状态管理
b、props 中的属性是只读属性,如果想修改其中的属性,需要在父组件中进行修改,之后再传给子组件; 每次渲染都会收到新版本的 props,
c、如果使用的是 类式组件的写法,需要写 construct super 才能在当前组件中使用 props 否则无法接收到 父组件传递的 props属性;
d、可以传递任意类型的属性,不限于基本类型、引用类型

1、Props基本用法: 主要以函数式写法说明,类式组件官网已不建议使用

    // 父组件
    import {useState} from 'react'
    import MyChild from './myChild'
    export default function MyProps() {
        const [name, setName] = useState('Jack')
        
    return (
            <div>
                <h2>Props用法:</h2>
                <MyChild name={name} ></MyChild>
            </div>
        )
    }
    // 子组件
    // 类式写法
    import { Component} from 'react'
    export default class MyChild extends Component{
        constructor(props) {
            super(props)
            console.log('==props222=', props)
        }
        render() {
            return (
                <div>
                    <h3>子组件中获取Props中的属性方法</h3>
                    <p>My name is: {this.props.name}</p>
                </div> 
            )
        }
    }
    // 函数式写法
    export default function MyChild(props) {
        console.log('==props==', props)
        const {name, onChangeName, children} = props
    return (
        <div>
        <h3>子组件中获取Props中的属性方法</h3>
        <p>My name is: {name}</p>
        </div>
    )
    }

2、Props传递默认值

// 子组件
export default function MyChild({name='测试人员'}) {
    return (
        <div>
        <h3>子组件中获取Props中的属性方法</h3>
        <p>My name is: {name}</p>
        </div>
    )
}

3、Props传递事件

    // 父组件
    import {useState} from 'react'
    import MyChild from './myChild'
    export default function MyProps() {
        const [name, setName] = useState()
        const onChangeName = (name) => {
            setName(name)
        }
    return (
        <div>
        <h2>Props用法:</h2>
        <MyChild name={name} onChangeName={onChangeName}></MyChild>
        </div>
    )
  }

// 子组件 
export default function MyChild({name='测试', onChangeName}) {
    // console.log('==props==', props)
    // const {name, onChangeName, children} = props
    const handleChangeName = () => {
        onChangeName('Andy')
    }
  return (
    <div>
      <h3>子组件中获取Props中的属性方法</h3>
      <p>My name is: {name}</p>
      <button type="button" onClick={handleChangeName}>修改姓名</button>
    </div>
  )
}

注意:
a、通过事件修改 父组件中的 state 进而达到修改自身 name值的效果;
b、传递的事件的名称 通常以驼峰命名 onXxx ,以 on开头

4、Props传递children

// 父组件
import React, {useState} from 'react'
import MyChild from './myChild'
export default function MyProps() {
    const [name, setName] = useState()
    const onChangeName = (name) => {
        setName(name)
    }
  return (
    <div>
      <h2>Props用法:</h2>
      <MyChild name={name} onChangeName={onChangeName}>
        <p>描述信息 通过 children 传入到 自组中</p>
        {
          <>
            <div>123</div>
            <h3>{456}</h3>
            {[678]}
          </>
        }
        
      </MyChild>
    </div>
  )
}


// 子组件
export default function MyChild({name='测试', onChangeName, children}) {
    // console.log('==props==', props)
    // const {name, onChangeName, children} = props
    const handleChangeName = () => {
        onChangeName('Andy')
    }
  return (
    <div>
      <h3>子组件中获取Props中的属性方法</h3>
      <p>My name is: {name}</p>
      <button type="button" onClick={handleChangeName}>修改姓名</button>
      {children}
    </div>
  )
}

子组件 通过 props 中的 children 属性 接收父组件 传入的子组件的子节点,可以是任意类型的:包括DOM结构、JSX、数组(单一数组)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刺客-Andy

努力将爱好变成更有价值的事物

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值