React 组件prop传值

news2025/1/16 20:55:59

将 props 传递给子组件

开发环境:React+ts+ant
将一些 props 传递给 Avatar。例如,让我们传递两个 props:person(一个对象)和 size(一个数字)

定义类组件Avatar(子组件)和函数Profile(父组件),代码如下:

import {Component} from "react";

const getImageUrl = (person: { imageId: string; }, size = 's') => {
    return (
        'https://i.imgur.com/' + person.imageId + size + '.jpg'
    );
}

class Avatar extends Component<{ person: any, size: any }> {
    render() {
        let {person, size} = this.props;
        return (
            <img
                className="avatar"
                src={getImageUrl(person)}
                alt={person.name}
                width={size}
                height={size}
            />
        );
    }
}


export default function Profile() {
    return (
        <>
            <Avatar
                size={100}
                person={{
                    name: 'Katsuko Saruhashi',
                    imageId: 'YfeOqp2'
            }}/>
            <Avatar
                size={80}
                person={{
                    name: 'Aklilu Lemma',
                    imageId: 'OKS67lh'
            }}/>
        </>
    );
}

我们可以通过在 Avatar 之后直接列出它们的名字 person, size 来读取这些 props。这些 props 在 ({ 和 }) 之间,并由逗号分隔。这样,我们可以在 Avatar 的代码中使用它们,就像使用变量一样。

页面渲染如下:
在这里插入图片描述

当然我们也可以其他页面使用product页面里面的子组件Avatar。
在需要使用的组件页面具名导入Avatar,让后传入对应的值即可

import React from 'react';
import {Avatar} from "./product";

const App: React.FC = () => (
    <div>
        <p>Bom 页面</p>
        <Avatar person={{
            name: 'Lin Lanying',
            imageId: '1bX5QH6'
        }} size={50}/>
    </div>
);

export default App;

页面渲染:
在这里插入图片描述

有时候props可能很多更复杂,下面贴一个复杂点的props,代码:

import {Component} from "react";
export function getImageUrl(person: { imageId: string; }, size = 's') {
    return (
        'https://i.imgur.com/' + person.imageId + size + '.jpg'
    );
}
class Profile extends Component<{ person: any, size: number }> {
    render() {
        let {person, size} = this.props;
        const imageSrc = getImageUrl(person)
        return (
            <section className="profile">
                <h2>{person.name}</h2>
                <img
                    className="avatar"
                    src={imageSrc}
                    alt={person.name}
                    width={size}
                    height={size}
                />
                <ul>
                    <li>
                        <b>Profession:</b> {person.profession}
                    </li>
                    <li>
                        <b>Awards: {person.awards.length} </b>
                        ({person.awards.join(', ')})
                    </li>
                    <li>
                        <b>Discovered: </b>
                        {person.discovery}
                    </li>
                </ul>
            </section>
        );
    }
}

export default function Gallery() {
    return (
        <div>
            <h1>Notable Scientists</h1>
            <Profile person={{
                imageId: 'szV5sdG',
                name: 'Maria Skłodowska-Curie',
                profession: 'physicist and chemist',
                discovery: 'polonium (chemical element)',
                awards: [
                    'Nobel Prize in Physics',
                    'Nobel Prize in Chemistry',
                    'Davy Medal',
                    'Matteucci Medal'
                ],
            }}  size={100}/>
            <Profile person={{
                imageId: 'YfeOqp2',
                name: 'Katsuko Saruhashi',
                profession: 'geochemist',
                discovery: 'a method for measuring carbon dioxide in seawater',
                awards: [
                    'Miyake Prize for geochemistry',
                    'Tanaka Prize'
                ],
            }}  size={70}/>
        </div>
    );
}

页面渲染
在这里插入图片描述

例子是参考React官方文档教程,不同的是我这里使用TS来写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1154305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【k8s】pod详解

一、pod介绍 1、pod的基础概念 Pod是kubernetes中最小的资源管理组件&#xff0c;Pod也是最小化运行容器化应用的资源对象&#xff0c;一个pod代表着集群中运行的一个进程。kubernetes中其它大多数组件都是围绕着pod来进行支持和扩展pod功能的。 例如&#xff0c;用于管理po…

科技战再次升级!国内前沿科技行业影响悬而未决

&#xff08;图片来源&#xff1a;网络&#xff09; 美国与中国的科技贸易战正在升级&#xff0c;美国总统拜登发布行政命令限制美国对半导体和微电子、量子信息技术和人工智能等特定行业的跨国投资。在此前美国对中国芯片相关出口的一系列限制之后&#xff0c;又增加了此项新…

遥遥领先,免费开源的django4-vue3项目

星域后台管理系统前端介绍 &#x1f33f;项目简介 本项目前端基于当下流行且常用的vue3作为主要技术栈进行开发&#xff0c;融合了typescript和element-plus-ui&#xff0c;提供暗黑模式和白昼模式两种主题以及全屏切换&#xff0c;开发bug少&#xff0c;简单易学&#xff0c…

面试算法44:二叉树中每层的最大值

题目 输入一棵二叉树&#xff0c;请找出二叉树中每层的最大值。例如&#xff0c;输入图7.4中的二叉树&#xff0c;返回各层节点的最大值[3&#xff0c;4&#xff0c;9]。 分析&#xff1a;用一个队列实现二叉树的广度优先搜索 由于要找出二叉树中每层的最大值&#xff0c;因…

TDengine 受邀参加 CNCC 2023,大会现场展位前“人山人海”!

10 月 26 日-28 日&#xff0c;2023 年度中国计算机大会&#xff08;CNCC 2023&#xff09;在沈阳新世界博览馆成功举办&#xff0c;本届大会以“发展数字基础设施&#xff0c;支撑数字中国建设”作为会议主题&#xff0c;参会规模头一次达到上万人。本届 CNCC 组织了 19 个特邀…

加速软件开发和交付的革命性方法-DevOps

“ 随着信息技术的快速发展&#xff0c;现代软件开发和交付已经经历了巨大的变革。DevOps&#xff08;Development和Operations的结合&#xff09;已经成为这一变革的关键推动力&#xff0c;让开发团队和运维团队之间的界限变得模糊&#xff0c;以加速软件的开发、测试和部署过…

Redis两大持久化方式

Redis具有两种主要的持久化方式&#xff1a;RDB&#xff08;Redis Database Backup&#xff09;和AOF&#xff08;Append-Only File&#xff09;。 1. RDB持久化方式 1.1 RDB概述 RDB&#xff08;Redis Database Backup&#xff09; RDB是Redis进行快照持久化的一种方式。它…

【Javascript】Javascript高级程序设计:dom 随手笔记

文章目录 一、dom 元素类型1.1 Node1.2 document1.3 Element1.4 Text 二、dom 操作2.1 querySelector、querySelectorAll2.2 元素遍历2.3 classList 操作2.4 焦点管理2.5 HTMLDocument 变化2.6 自定义数据属性2.7 插入标记2.7.1 innerHTML2.7.2 outerHTML 2.8 scrollIntoView 三…

【推荐系统】推荐算法:冷启动-召回-粗排-精排-重排 解读

【推荐系统】推荐算法&#xff1a;冷启动-召回-粗排-精排-重排 解读 文章目录 【推荐系统】推荐算法&#xff1a;冷启动-召回-粗排-精排-重排 解读1. 介绍2. 冷启动2.1 用户冷启动2.1.1 利用用户注册信息冷启动2.1.2 好物推荐冷启动2.1.3 问题启发式冷启动2.1.4 社交冷启动2.1.…

Qt程序执行编译输出内容解释

以这个为例&#xff1a; D:\SoftwareInstall\Qt6\Tools\QtCreator\bin\jom\jom.exe -f Makefile.Debug cd AuthorizeTools\ && ( if not exist Makefile D:\SoftwareInstall\Qt6\5.15.2\msvc2019_64\bin\qmake.exe -o Makefile E:\Coding\project\DigitalCamera\digita…

渗透测试流程是什么?这篇给你讲清楚!

在学习渗透测试之初&#xff0c;有必要先系统了解一下它的流程&#xff0c;静下心来阅读一下&#xff0c;树立一个全局观&#xff0c;一步一步去建设并完善自己的专业领域&#xff0c;最终实现从懵逼到牛逼的华丽转变。渗透测试是通过模拟恶意黑客的攻击方法&#xff0c;同时也…

ceph高可用、手动安装

操作系统&#xff1a;centos8 三台服务器&#xff1a; 192.168.6.22&#xff1a;mon,mgr,mds,osd 192.168.6.23&#xff1a;mon,mgr,mds,osd 192.168.6.24&#xff1a;mon,mgr,mds,osd 正式环境osd和mon不应该在一个节点&#xff0c;建议osd单独服务器安装。 ceph版本&am…

python scrapy 报错 DEBUG: Ignoring response 403

DEBUG: Ignoring response <403 https://digital.ucas.com/coursedisplay/results/courses?studyYear2024>: HTTP status code is not handled or not allowed原因&#xff1a;被屏蔽了&#xff0c;在settings.py 里面配一下USER_AGENT&#xff08;随便写一个就行&#…

历年上午真题笔记(2014年)

解析:A 网络设计的三层模型 : 接入层:Layer 2 Switching,最终用户被许可接入网络的点,用户通过接入层可以访问网络设备。 汇聚层:Layer2/3 Switching,访问层设备的汇聚点,负责汇接配线单元,利用二、三层技术实现工作组分段及网络故障的隔离,以免对核心层网络设备造…

A股风格因子看板 (2023.10 第13期)

该因子看板跟踪A股风格因子&#xff0c;该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子&#xff0c;用以分析市场风格切换、组合风格暴露等。 今日为该因子跟踪第13期&#xff0c;指数组合数据截止日2023-09-30&#xff0c;要点如下 近1年A股风格因子检验统…

第3天:基础入门-抓包amp;封包amp;协议amp;APPamp;小程序amp;PC应用amp;WEB应用

第3天&#xff1a;基础入门-抓包&封包&协议&APP&小程序&PC应用&WEB应用 1、抓包技术应用意义//有些应用或者目标是看不到的&#xff0c;这时候就要进行抓包 2、抓包技术应用对象 //app,小程序 3、抓包技术应用协议 //http&#xff0c;socket 4、抓包技…

MaxEnt(最大熵)模型使用方法-系统教程

MaxEnt模型是通过物种已知分布数据和相关环境变量来推算物种的生态需求&#xff0c;然后将运算结果投射至不同的空间和时间中以预测物种的潜在分布区。由于对样本需求量要求小、预测能力优等特点&#xff0c;已被广泛应用于物种潜在分布区预测、外来入侵物种风险评估及气候变化…

11月17号|Move生态Meetup相约浪漫土耳其

Move是基于Rust编程语言&#xff0c;由Mysten Labs联合创始人兼CTO Sam Blackshear在Meta的Libra项目中开发而来&#xff0c;旨在为开发者提供比现有区块链语言更通用的开发语言。Sam的目标是创建Web3的JavaScript&#xff0c;即一种跨平台语言&#xff0c;使开发人员能够在多个…

希尔顿集团飞猪旗舰店携海外酒店开启双11全球旅行囤货潮

【中国&#xff0c;上海&#xff0c;10月31日】继十一黄金周出游需求释放&#xff0c;旅游市场回归超预期&#xff0c;希尔顿集团洞悉旅行者们对于探索目的地的热情不减&#xff0c;于今日在希尔顿集团飞猪旗舰店正式上线2023年双11系列活动&#xff0c;并首次布局海外酒店&…

【Linux】进程状态与进程优先级及其相关概念

文章目录 进程基本概念描述进程-PCBtask_struct-PCB的一种task_ struct内容分类 组织进程查看进程通过系统调用获取进程标示符通过系统调用创建进程-fork初识fork原理fork做了什么?fork是如何看待进程的fork如何理解两个返回值的功能 进程状态进程状态&#xff1a;1.普遍的操作…