React 是一个用于构建用户界面的开源JavaScript库,由Facebook维护。它以组件化的方式构建应用程序,使得代码更加模块化、可重用和易于维护。React主要用于构建单页应用程序(SPA)和移动应用的用户界面。
React的核心特性包括:
- 组件化:React应用由多个独立、可复用的组件构成,每个组件管理自己的状态。
- 虚拟DOM:React为每个DOM对象维护一个轻量级的虚拟DOM副本,当组件状态变化时,React首先在虚拟DOM上进行变化,然后高效地将这些变化应用到实际的DOM上。
- 声明式语法:React使用声明式渲染,你只需要描述UI应该呈现的样子,React会负责更新DOM。
- 单向数据流:React应用的数据流是单向的,从父组件流向子组件,通过属性(props)传递。
- Hooks:React 16.8引入了Hooks,允许在函数组件中使用state和其他React特性。
- JSX:React使用JSX语法扩展JavaScript,允许你在JavaScript代码中写类似HTML的标记。
如何使用React:
设置环境:你可以使用Create React App来快速设置React开发环境。
npx create-react-app my-app cd my-app npm start
编写组件:React组件可以是类组件或函数组件。
类组件示例:
import React, { Component } from 'react'; class Greeting extends Component { render() { return <h1>Hello, {this.props.name}!</h1>; } } export default Greeting;
函数组件示例:
import React from 'react'; function Greeting(props) { return <h1>Hello, {props.name}!</h1>; } export default Greeting;
使用组件:在React应用中,你可以通过
<组件名 />
的方式使用组件。import React from 'react'; import ReactDOM from 'react-dom'; import Greeting from './Greeting'; ReactDOM.render(<Greeting name="John" />, document.getElementById('root'));
状态管理:组件可以通过
this.setState()
(类组件)或useState
Hook(函数组件)来管理内部状态。类组件状态示例:
class Counter extends Component { constructor(props) { super(props); this.state = { count: 0 }; } increment() { this.setState({ count: this.state.count + 1 }); } render() { return ( <div> <h1>{this.state.count}</h1> <button onClick={() => this.increment()}>Increment</button> </div> ); } }
函数组件状态示例:
import React, { useState } from 'react'; function Counter() { const [count, setCount] = useState(0); function increment() { setCount(count + 1); } return ( <div> <h1>{count}</h1> <button onClick={increment}>Increment</button> </div> ); }
属性传递:父组件通过属性(props)向子组件传递数据。
function Greeting(props) { return <h1>Hello, {props.name}!</h1>; } // 使用组件时传递属性 <Greeting name="Alice" />
条件渲染:根据条件渲染不同的组件或元素。
function UserGreeting(props) { if (props.isLoggedIn) { return <Greeting name={props.name} />; } else { return <p>Please log in.</p>; } }
列表渲染:使用
map()
方法遍历数组,为每项数据渲染元素。function ItemList(props) { const items = props.items.map((item) => <li key={item.id}>{item.name}</li> ); return <ul>{items}</ul>; }