首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1构建Product Hunt项目
1.2设置开发环境
1.3针对Windows用户的特殊说明
1.4JavaScript ES6/ES7
1.5什么是组件
1.6构建Product组件
1.7让数据驱动Product组件
1.8应用程序的第 一次交互:投票事件响应
1.9更新state和不变性
1.10用Babel插件重构transform-class-properties
2.1计时器应用程序
2.2开始计时器应用程序
2.3将应用程序分解为组件
2.4从头开始构建React应用程序的步骤
2.5第(2)步:构建应用程序的静态版本
2.6第(3)步:确定哪些组件应该是有状态的
2.7第(4)步:确定每个state 应该位于哪个组件中
2.8第(5)步:通过硬编码来初始化state
2.9第(6)步:添加反向数据流
2.10更新计时器
2.11删除计时器
2.12添加计时功能
2.13添加启动和停止功能
3.1组件和服务器介绍
3.2server.js
3.3服务器API
3.4使用API
3.5从服务器加载状态
3.6client
3.7向服务器发送开始和停止请求
3.8向服务器发送创建、更新和删除请求
3.9下一步
4.1React使用了虚拟DOM
4.2为什么不修改实际的DOM
4.3什么是虚拟DOM
4.4虚拟DOM片段
4.5ReactElement
4.6JSX
5.1props、state和children介绍
5.2如何使用本章
5.3ReactComponent
5.4props是参数
5.5PropTypes
5.6使用getDefaultProps()获取默认props
5.7上下文
5.8state
5.9无状态组件
5.10使用props.children与子组件对话
6.1表单101
6.2文本输入
6.3远程数据
6.4异步持久性
6.5Redux
6.6表单模块
7.1JavaScript模块
7.2Create React App
7.3探索Create React App
7.4Webpack基础
7.5对示例应用程序进行修改
7.6创建生产构建
7.7弹出
7.8Create React App和API服务器一起使用
7.9Webpack总结
8.1不使用框架编写测试
8.2Jest是什么
8.3使用Jest
8.4React应用程序的测试策略
8.5使用Enzyme测试基本的React组件
8.6为食物查找应用程序编写测试
8.7编写FoodSearch.test.js
当前位置:
首页>>
技术小册>>
React全家桶--前端开发与实例(上)
小册名称:React全家桶--前端开发与实例(上)
### 5.1 Props、State和Children介绍 在React的世界里,组件(Component)是构建用户界面的基石。每个组件负责渲染UI的一部分,并可以包含自己的状态(State)和属性(Props),以及子组件(Children)。了解并掌握`props`、`state`和`children`是深入学习React并高效开发React应用的关键。本章将详细探讨这三者的基本概念、用法以及它们在React组件通信中的作用。 #### 5.1.1 Props(属性) **基本概念** Props,即properties的缩写,是React组件之间传递数据的桥梁。它们是从父组件传递给子组件的数据。Props是只读的,意味着你不能在子组件中直接修改props的值,这有助于保持数据流的清晰和组件间的解耦。 **用法示例** 假设我们有一个`Greeting`组件,它接收一个`name`属性来显示问候语: ```jsx function Greeting(props) { return <h1>Hello, {props.name}!</h1>; } // 使用Greeting组件,并传递name属性 ReactDOM.render(<Greeting name="Alice" />, document.getElementById('root')); ``` 从React 15.5版本开始,推荐使用ES6的解构赋值来简化props的使用: ```jsx function Greeting({ name }) { return <h1>Hello, {name}!</h1>; } // 使用方式不变 ReactDOM.render(<Greeting name="Bob" />, document.getElementById('root')); ``` **Props的验证** 为了确保组件接收到的props符合预期,React提供了`PropTypes`库(在React 15.5之后,需要从`prop-types`包中单独引入)来进行props的类型和必要性的验证。这有助于在开发阶段捕获错误,提高应用的健壮性。 ```jsx import PropTypes from 'prop-types'; function Greeting({ name }) { return <h1>Hello, {name}!</h1>; } Greeting.propTypes = { name: PropTypes.string.isRequired, }; ``` #### 5.1.2 State(状态) **基本概念** 与props不同,state是组件内部的私有数据,它允许组件根据用户的输入、服务器响应或时间变化来动态更新UI。当组件的state发生变化时,组件会重新渲染。 **使用场景** - 组件需要控制并响应用户输入(如文本输入框) - 组件需要根据从服务器获取的数据来显示UI - 组件需要在内部维护一些随着时间变化的数据(如定时器、计数器) **用法示例** 下面是一个简单的计数器组件,展示了如何使用state来管理内部状态: ```jsx class Counter extends React.Component { constructor(props) { super(props); // 初始化state this.state = { count: 0, }; } increment = () => { // 更新state,触发组件重新渲染 this.setState(prevState => ({ count: prevState.count + 1, })); } render() { return ( <div> <p>You clicked {this.state.count} times</p> <button onClick={this.increment}>Click me</button> </div> ); } } ReactDOM.render(<Counter />, document.getElementById('root')); ``` **注意** - 尽量避免在组件的构造函数(`constructor`)之外直接修改state,而应使用`this.setState()`方法。 - `this.setState()`是异步的,但它会合并多个更新并批量处理,以提高性能。如果需要基于前一个状态来设置状态,可以像上面的例子那样,使用函数的形式来传递更新器。 #### 5.1.3 Children(子组件) **基本概念** Children指的是组件标签之间的内容,即组件的子元素或子组件。React提供了一种机制来让组件能够访问其子元素,这在进行组件布局或高阶组件(HOCs)时非常有用。 **用法示例** 假设我们有一个`Layout`组件,它接受任意内容作为其子元素: ```jsx function Layout({ children }) { return ( <div className="container"> <header>My Header</header> {children} // 这里渲染传入的children <footer>My Footer</footer> </div> ); } // 使用Layout组件,并传入其他组件或元素作为其子元素 ReactDOM.render( <Layout> <p>This is the main content.</p> <MyOtherComponent /> </Layout>, document.getElementById('root') ); ``` 在上面的例子中,`Layout`组件通过`{children}`插入了所有传递给它的子元素。这种方式使得`Layout`组件非常灵活,能够适用于多种不同的布局场景。 **特殊属性:`this.props.children`** 在类组件中,你也可以通过`this.props.children`来访问子元素。但在函数组件中,更常见的做法是通过函数参数解构来获取`children`。 **高阶用法** React的children API还支持一些高级用法,如`React.Children.map`、`React.Children.forEach`等,它们允许你遍历`this.props.children`,并对每个子元素执行操作。这对于处理不确定数量或类型的子元素时特别有用。 #### 总结 `props`、`state`和`children`是React组件的三大核心概念,它们共同构成了React应用的基石。`props`用于组件间的数据传递,`state`用于组件内部状态的维护,而`children`则让组件能够包含并渲染其他组件或元素。深入理解并熟练掌握这些概念,对于开发高效、可维护的React应用至关重要。通过实践,你将能够更加灵活地运用它们来构建复杂的前端应用。
上一篇:
4.6JSX
下一篇:
5.2如何使用本章
该分类下的相关小册推荐:
React全家桶--前端开发与实例(下)
ReactJS面试指南
剑指Reactjs
React 进阶实践指南
深入学习React实战进阶