React简介
React是一个用于构建用户界面的JavaScript库,由Facebook开发并开源。它采用组件化模式,声明式编程,可以帮助开发者高效地创建交互式UI。
React 核心概念
组件化:将UI拆分为独立、可复用的组件,每个组件管理自己的状态。
声明式编程:描述UI应该是什么样子,而不是如何更新它,简化代码逻辑。
虚拟DOM:React使用虚拟DOM来提高性能,通过比较虚拟DOM的变化来最小化实际DOM操作。
React与其他框架对比
React专注于视图层,不提供完整的前端解决方案(如路由、状态管理),但拥有丰富的生态系统。
这是一个简单的React示例,展示了React的基本工作原理:
// 使用JSX语法创建React组件 class Welcome extends React.Component { render() { return ( <div> <h1>Hello, React!</h1> <p>这是我的第一个React组件</p> </div> ); } } // 渲染组件到DOM ReactDOM.render( <Welcome />, document.getElementById('root') );
JSX语法
JSX是JavaScript的语法扩展,允许在JavaScript中编写类似HTML的代码。它最终会被编译为普通的JavaScript函数调用。
// JSX示例 const element = <h1>Hello, world!</h1>; // JSX中使用JavaScript表达式 const name = 'React'; const element = <h1>Hello, {name}!</h1>; // JSX属性 const element = <img src="logo.png" alt="Logo" />; // JSX中的条件渲染 function Greeting(props) { const isLoggedIn = props.isLoggedIn; if (isLoggedIn) { return <h1>Welcome back!</h1>; } return <h1>Please sign up.</h1>; } // JSX中的列表渲染 const numbers = [1, 2, 3, 4, 5]; const listItems = numbers.map((number) => <li key={number.toString()}>{number}</li> );
JSX重要规则
1. JSX必须有一个根元素(或使用Fragment <></>)
2. JSX中的JavaScript表达式使用花括号 {} 包裹
3. JSX中的class属性要写成 className
4. 内联样式要使用对象形式:style={{color: 'red', fontSize: '14px'}}
下面的React组件展示了JSX的各种用法:
组件基础
React组件是构建UI的基本单元。组件可以是类组件或函数组件,它们接收参数(props)并返回描述UI的React元素。
// 1. 函数组件 (简单组件) function Welcome(props) { return <h1>Hello, {props.name}!</h1>; } // 2. 类组件 (可以包含状态和生命周期方法) class Welcome extends React.Component { render() { return <h1>Hello, {this.props.name}!</h1>; } } // 3. 箭头函数组件 const Welcome = (props) => { return <h1>Hello, {props.name}!</h1>; }; // 4. 组件组合 function App() { return ( <div> <Welcome name="Alice" /> <Welcome name="Bob" /> <Welcome name="Charlie" /> </div> ); }
下面的示例展示了多个React组件的组合使用:
组件演示区
Props与State
Props和State是React中两个重要的概念。Props是父组件传递给子组件的数据,State是组件内部的状态数据。
// Props示例:父组件向子组件传递数据 function Welcome(props) { return <h1>Hello, {props.name}!</h1>; } function App() { return ( <div> <Welcome name="Alice" /> <Welcome name="Bob" /> </div> ); } // State示例:类组件中的状态管理