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

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} = propsreturn (<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} = propsconst 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} = propsconst 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.lryc.cn/news/489177.html

相关文章:

  • 测评部署和管理 WordPress 最方便的面板
  • 【系统分析师】-2024年11月论文-论DevOps开发
  • 算法【子数组最大累加和问题与扩展】
  • 小程序23-页面的跳转:navigation 组件详解
  • AI社媒引流工具:解锁智能化营销的新未来
  • 【Node.js】全面解析 Node.js 安全最佳实践:保护您的应用
  • Docker 用法详解
  • Python小游戏28——水果忍者
  • Kafka Offset 自动提交和手动提交 - 漏消费与重复消费
  • Vue3父组件和子组件
  • Linux 定时任务全解析
  • XLNet——打破 BERT 局限的预训练语言模型
  • 开源代码统计工具cloc的简单使用
  • 如何创建一个项目用于研究element-plus的原理
  • 单片机进阶硬件部分_day2_项目实践
  • labview关于文件路径的问题
  • 72项!湖北省2024年度第二批省级科技计划项目拟立项项目公示!
  • 神经网络问题之:梯度不稳定
  • ORACLE删不掉job,如何解决。
  • 可视化建模与UML《活动图实验报告》
  • 基于 MUSA 的大语言模型推理和服务框架vLLM
  • 鸿蒙网络编程系列48-仓颉版UDP回声服务器示例
  • android-studio-4.2下载 、启动
  • 深度学习day2-Tensor 2
  • 【Android踩过的坑】14.小米系统TTS无法生效的问题
  • RabbitMQ实现异步下单与退单
  • 鸿蒙NEXT开发案例:随机数生成
  • nwjs崩溃复现、 nwjs-控制台手动操纵、nwjs崩溃调用栈解码、剪切板例子中、nwjs混合模式、xdotool显示nwjs所有进程窗口列表
  • 视觉SLAM--经典视觉SLAM框架
  • Wallpaper壁纸制作学习记录05