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

React-组件和props

 1、类组件

import React from 'react';
class ClassApp extends React.Component {constructor(props) {super(props);this.state={};}render() {return (<div><h1>这是一个类组件</h1><p>接收父组件传过来的值:{this.props.name}</p></div>);}
}
export default ClassApp;

2、函数组件

import React from 'react';
function FuncApp(props) {return (<div><h1>我是函数组件</h1><h2>接收父组件传过来的值:{props.name}</h2></div>);
}

3、组件样式控制

import './index.css';
function FuncApp(props) {return (<div><h1 style={{ color: 'red', fontSize: 25 }}>我是函数组件</h1><h2 className='info-box'>接收父组件传过来的值:{props.name}</h2></div>);
}// index.css
.info-box {color: skyblue;font-size: 25px;
}

4、React表单组件

React中的表单组件大致可分为两类:

  • 受控组件:一般涉及到表单元素时我们才会使用这种分类方法。受控组件的值由props或state传入,用户在元素上交互或输入内容会引起应用state的改变。在state改变之后重新渲染组件,我们才能在页面中看到元素中值的变化,假如组件没有绑定事件处理函数改变state,用户的输入是不会起到任何效果的,这也就是“受控”的含义所在。
  • 非受控组件:类似于传统的DOM表单控件,用户输入不会直接引起应用state的变化,我们也不会直接为非受控组件传入值。想要获取非受控组件,我们需要使用一个特殊的ref属性,同样也可以使用defaultValue属性来为其指定一次性的默认值。
//受控组件
this.state = {value: "默认值"
}
change(event) {this.setState({value: event.target.value})
}
<div><input type="text" value={this.state.value} onChange={this.change.bind(this)} /><p> {this.state.value} </p>
</div>// hooks写法
import { useState } from "react";
function App() {const [name, setName] = useState('')return (<div className="App"><input type="text" value={name} onChange={(e) => setName(e.target.value)} /></div>);
}
export default App;//非受控组件
<input type="text" defaultValue="hello!"/>

5、React获取dom元素

        在react中操作dom,可以使用useRef钩子函数

(1)使用useRef创建ref对象,并于JSX绑定

import { useRef } from "react";
function App() {const inputRef = useRef(null)return (<div className="App"><input type="text" ref={inputRef} /><button onClick={showDom}>显示dom</button></div>);
}
export default App;

(2)在DOM可用时,通过inputRef.current拿到DOM对象

const showDom = () => {console.log(inputRef.current);
}

6、props

(1)定义和使用props

        react中的每一个组件,都包含有一个属性(props),属性主要是从父组件传递给子组件的 

// 父组件
function App() {const name = '张三'return (<div className="App"><Son name={name} /></div>);
}// 子组件
function Son(props) {return (<div>{ props.name }</div>)
}

(2)特殊的prop children(类似于Vue的插槽)

        当我们把内容嵌套在子组件标签中时,父组件会自动在名为children的prop属性中接收该内容

// 父组件
function App() {const name = '张三'return (<div className="App"><Son name={name}><span>hello</span></Son></div>);
}// 子组件
function Son(props) {return (<div>{ props.children }--{ props.name}</div>)
}

相关文章:

  • 【Python爬虫实战篇】--Selenium爬取Mysteel数据
  • Cephalon端脑云:神经形态计算+边缘AI·重定义云端算力
  • 网页版 deepseek 对话问答内容导出为 PDF 文件和 Word 文件的浏览器插件下载安装和使用说明
  • spark-streaming(二)
  • NeRF:原理 + 实现 + 实践全流程配置+数据集测试【Ubuntu20.04 】【2025最新版】
  • 【1区SCI】Fusion entropy融合熵,多尺度,复合多尺度、时移多尺度、层次 + 故障识别、诊断-matlab代码
  • CE第一次作业
  • 协作开发攻略:Git全面使用指南 — 第一部分 Git基础
  • 3台CentOS虚拟机部署 StarRocks 1 FE+ 3 BE集群
  • 与终端同居日记:Shell交响曲の终极共舞指南
  • 海量聊天消息处理:ShardingJDBC分库分表、ClickHouse冷热数据分离、ES复合查询方案、Flink实时计算与SpringCloud集成
  • C++ RPC以及cmake
  • Oracle 11g RAC ASM磁盘组剔盘、加盘实施过程
  • 基于 CentOS 的 Docker Swarm 集群管理实战指南
  • CentOS 7 基于 Nginx 的 HTML 部署全流程指南
  • 智能吸顶灯/摄影补光灯专用!FP7195双通道LED驱动,高效节能省空间 !
  • 保姆级教程:用EndNote 20让参考文献自动分组排序(中文在前,英文在后)
  • 【bug修复】一次诡异的接口数据显示 bug 排查之旅
  • Java高频面试之并发编程-07
  • Docker部署一款开源的极简服务器监控工具Ward内网穿透远程使用
  • 《不眠之夜》上演8年推出特别版,多业态联动形成戏剧经济带
  • 低轨卫星“千帆星座”已完成五批次组网卫星发射,未来还有这些计划
  • 著名诗人、中国城市发展研究院原常务副院长吕贵品逝世
  • 一夜跌去200美元,黄金巨震冲上热搜!涨势已近尾声?
  • 已有17个国家和国际组织、50多个国际科研机构加入国际月球科研站合作
  • 中国建设银行原党委委员、副行长章更生严重违纪违法被开除党籍