当前位置: 首页 > article >正文

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

特性

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、数组(单一数组)


http://www.kler.cn/a/404609.html

相关文章:

  • STM32芯片EXIT外部中断的配置与原理以及模板代码(标准库)
  • el-progress进度条框开着时,要实时刷新显示进度条
  • Linux 服务器使用指南:从入门到登录
  • OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)
  • QoE和QoS的区别
  • AI一键生成原创花卉印花图案——创新与效率的结合
  • ts: 定义一个对象接收后端返回对象数据,但是报错了有红色的红线为什么
  • 安全测试必学神器 --BurpSuite 安装及使用实操
  • Go 工具链详解(八):go telemetry
  • Wallpaper壁纸制作学习记录05
  • 【JavaSE 网络编程和日期与时间知识总结】
  • Java Web应用中的跨站请求伪造(CSRF)防御策略
  • 关于一次开源java spring快速开发平台项目RuoYi部署的记录
  • hj 212 协议解包php解包,
  • 从0开始的数据结构速过——番外(1)
  • ubuntu20.04如何升级python3.8到python3.10
  • React 组件中 State 的定义、使用及正确更新方式
  • 本地git多用户ssh配置
  • Adobe XD文件处理:即时设计的在线解决方案
  • 腾讯云存储COS上传视频报错
  • vue3+ant design vue带勾选表格的坑,记录一下
  • Android开发实战班 - 第一部分:Android开发基础
  • 李沐学习安装d2l、gpu-pytorch
  • Android Google登录接入
  • 【Amazon】亚马逊云科技Amazon DynamoDB 实践Amazon DynamoDB
  • windows下编译ffmpeg4.4版本