react 基础知识
我需要了解React的基本概念。首先,组件是React的核心。组件可以是函数组件或类组件。函数组件比较简单,适合简单的UI展示,而类组件可以管理状态和生命周期。
比如,一个简单的函数组件:
javascript
换行复制代码
1function HelloWorld() {
2  return <h1>Hello, World!</h1>;
3}
然后,我需要理解JSX,这是React中允许在JavaScript中使用HTML语法的扩展。JSX会被编译成React.createElement方法调用。
接下来是状态管理。React中的state用于存储组件的本地数据。使用useState钩子可以轻松管理状态。比如:
javascript
换行复制代码
1function Counter() {
2  const [count, setCount] = useState(0);
3  return (
4    <div>
5      <p>{count}</p>
6      <button onClick={() => setCount(count + 1)}>Increment</button>
7    </div>
8  );
9}
事件处理在React中是通过传递函数来实现的。比如,点击按钮调用setCount函数。
然后是组件的属性(props)。props用于在组件之间传递数据。比如:
javascript
换行复制代码
1function Greeting(props) {
2  return <h1>Hello, {props.name}!</h1>;
3}
4<Greeting name="Alice" />
这样,父组件可以向子组件传递数据。
React的虚拟DOM是一个重要的概念。React会生成一个虚拟DOM树,当状态变化时,React会比较新的虚拟DOM和旧的虚拟DOM,只更新变化的部分,从而提高性能。
然后是React的生命周期方法,主要适用于类组件。比如componentDidMount用于组件挂载后执行的操作,componentDidUpdate用于组件更新时的操作,componentWillUnmount用于组件卸载前的操作。
钩子(Hooks)是React 16.8引入的新特性,允许函数组件使用状态和其他React特性。常用的钩子有useState、useEffect、useContext等。
useEffect用于副作用操作,比如数据获取、订阅或手动更新DOM。比如:
javascript
换行复制代码
1useEffect(() => {
2  fetch('https://api.example.com/data')
3    .then(response => response.json())
4    .then(data => setData(data));
5}, []);
这样可以在组件挂载时获取数据。
useContext用于访问全局状态,避免通过props逐层传递数据。比如:
javascript
换行复制代码
1const DataContext = React.createContext();
2
3function App() {
4  const data = { name: 'Alice' };
5  return (
6    <DataContext.Provider value={data}>
7      <User />
8    </DataContext.Provider>
9  );
10}
11
12function User() {
13  const data = useContext(DataContext);
14  return <h1>{data.name}</h1>;
15}
这样,User组件可以直接访问全局数据。
路由是单页应用中导航的重要部分。React Router是常用的路由库,允许定义不同的页面和导航。比如:
javascript
换行复制代码
1import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
2
3function App() {
4  return (
5    <Router>
6      <nav>
7        <Link to="/">Home</Link>
8        <Link to="/about">About</Link>
9      </nav>
10      <Route path="/" exact component={Home} />
11      <Route path="/about" component={About} />
12    </Router>
13  );
14}
这样,点击链接可以在不同的组件之间切换。
Redux是一个状态管理库,适用于复杂的应用。它通过单一的数据源(store)来管理应用的状态。使用Redux需要理解Action、Reducer、Store等概念。比如:
javascript
换行复制代码
1// reducer.js
2function counterReducer(state = 0, action) {
3  switch (action.type) {
4    case 'INCREMENT':
5      return state + 1;
6    case 'DECREMENT':
7      return state - 1;
8    default:
9      return state;
10  }
11}
12
13// store.js
14import { createStore } from 'redux';
15const store = createStore(counterReducer);
16
17// Component.js
18function Counter() {
19  const state = useSelector(state => state);
20  const dispatch = useDispatch();
21  return (
22    <div>
23      <p>{state}</p>
24      <button onClick={() => dispatch({ type: 'INCREMENT' })}>Increment</button>
25      <button onClick={() => dispatch({ type: 'DECREMENT' })}>Decrement</button>
26    </div>
27  );
28}
这样,组件可以通过Redux管理全局状态。
React的生态系统非常丰富,有很多第三方库和工具。比如,React Native用于构建移动应用,Next.js是一个React框架,支持SSR和静态生成等。
测试在React开发中也很重要。Jest是一个常用的测试框架,可以编写单元测试和集成测试。Enzyme是一个用于测试React组件的工具库,提供了丰富的断言和遍历方法。
部署React应用通常需要构建优化后的生产版本。使用npm run build生成静态文件,然后可以部署到各种服务器或云平台,如Netlify、Vercel等。
最后,React的社区非常活跃,有很多教程、文档和示例项目。通过不断的学习和实践,可以逐步掌握React的精髓,开发出高效的前端应用。
React 基础知识
React 是一个由 Facebook 开发的用于构建用户界面的 JavaScript 库,它采用组件化的方式,让开发者能够更高效地构建复杂的 UI。以下是 React 的核心概念和基础知识:
1. 安装与环境配置
- 
安装 Node.js 和 npm:React 项目依赖于 Node.js 和 npm(Node Package Manager),用于管理依赖和构建工具。
 - 
创建 React 项目
:
bash
换行复制代码
1npx create-react-app my-react-app
2cd my-react-app
3npm start这将创建一个默认的 React 项目,并启动开发服务器。
 
2. 组件化开发
- 
组件:React 的核心概念,是可复用的 UI 片段。
- 
函数组件:使用 JavaScript 函数定义,适合简单的 UI。
 - 
类组件:使用 ES6 类定义,适用于需要管理状态和生命周期的组件。
 
javascript
换行复制代码
1// 函数组件
2function HelloWorld() {
3 return <h1>Hello, World!</h1>;
4}
5
6// 类组件
7class HelloWorld extends React.Component {
8 render() {
9 return <h1>Hello, World!</h1>;
10 }
11} - 
 
3. JSX(JavaScript XML)
- 
概念:允许在 JavaScript 中直接编写 HTML 语法,提高代码的可读性和编写效率。
 - 
语法
:
javascript
换行复制代码
1function HelloWorld() {
2 return (
3 <div>
4 <h1>Hello, World!</h1>
5 <p>This is JSX!</p>
6 </div>
7 );
8} 
4. 状态管理(State)
- 
useState钩子:用于管理组件的本地状态。
javascript
换行复制代码
1function Counter() {
2 const [count, setCount] = React.useState(0);
3 return (
4 <div>
5 <p>Count: {count}</p>
6 <button onClick={() => setCount(count + 1)}>Increment</button>
7 </div>
8 );
9} 
5. 属性(Props)
- 
定义
:组件之间的数据传递方式。
javascript
换行复制代码
1// 父组件
2function App() {
3 return <Greeting name="Alice" />;
4}
5
6// 子组件
7function Greeting(props) {
8 return <h1>Hello, {props.name}!</h1>;
9} 
6. 事件处理
- 
语法
:通过传递函数来处理用户交互事件。
javascript
换行复制代码
1function ClickCounter() {
2 const [count, setCount] = React.useState(0);
3 return (
4 <button onClick={() => setCount(count + 1)}>
5 Clicked {count} times
6 </button>
7 );
8} 
7. 虚拟 DOM
- 
概念:React 通过生成虚拟 DOM 树来提高渲染性能,只更新变化的部分。
 
8. 组件生命周期
- 
类组件
:通过生命周期方法管理组件的整个生命周期。
- 
componentDidMount:组件挂载后执行。 - 
componentDidUpdate:组件更新时执行。 - 
componentWillUnmount:组件卸载前执行。 
 - 
 
9. 钩子(Hooks)
- 
useState:管理组件状态。 - 
useEffect:处理副作用(如数据获取、订阅)。javascript
换行复制代码
1function DataFetcher() {
2 const [data, setData] = React.useState(null);
3
4 React.useEffect(() => {
5 fetch('https://api.example.com/data')
6 .then(response => response.json())
7 .then(data => setData(data));
8 }, []);
9
10 return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>;
11} - 
useContext:访问全局状态。javascript
换行复制代码
1const DataContext = React.createContext();
2
3function App() {
4 return (
5 <DataContext.Provider value={{ name: 'Alice' }}>
6 <User />
7 </DataContext.Provider>
8 );
9}
10
11function User() {
12 const data = React.useContext(DataContext);
13 return <h1>{data.name}</h1>;
14} 
10. 路由(React Router)
- 
安装:
npm install react-router-dom - 
使用
:
javascript
换行复制代码
1import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
2
3function App() {
4 return (
5 <Router>
6 <nav>
7 <Link to="/">Home</Link>
8 <Link to="/about">About</Link>
9 </nav>
10 <Route path="/" exact component={Home} />
11 <Route path="/about" component={About} />
12 </Router>
13 );
14} 
11. 状态管理(Redux)
- 
概念:适用于复杂应用的状态管理,通过单一数据源(store)管理应用状态。
 - 
安装:
npm install redux react-redux - 
使用
:
javascript
换行复制代码
1// reducer.js
2function counterReducer(state = 0, action) {
3 switch (action.type) {
4 case 'INCREMENT':
5 return state + 1;
6 case 'DECREMENT':
7 return state - 1;
8 default:
9 return state;
10 }
11}
12
13// store.js
14import { createStore } from 'redux';
15const store = createStore(counterReducer);
16
17// Component.js
18function Counter() {
19 const state = React.useSelector(state => state);
20 const dispatch = React.useDispatch();
21 return (
22 <div>
23 <p>{state}</p>
24 <button onClick={() => dispatch({ type: 'INCREMENT' })}>Increment</button>
25 <button onClick={() => dispatch({ type: 'DECREMENT' })}>Decrement</button>
26 </div>
27 );
28} 
12. 生态系统与工具
- 
React Native:用于构建移动应用。
 - 
Next.js:React 框架,支持服务器端渲染(SSR)和静态生成。
 - 
测试工具:Jest(单元测试)、Enzyme(组件测试)。
 
13. 部署
- 
构建生产版本:
npm run build - 
部署平台:Netlify、Vercel、GitHub Pages 等。
1. 环境搭建
(1) 安装 Node.js
- 
访问官网下载安装
 
(2) 创建 React 项目
bash
换行复制代码
1npx create-react-app my-app # 创建项目
2cd my-app # 进入项目目录
3npm start # 启动开发服务器浏览器访问
http://localhost:3000,看到默认页面即表示成功。2. 核心概念
(1) JSX 语法
- 
作用:在 JavaScript 中直接编写类似 HTML 的代码。
 - 
示例
:
jsx
换行复制代码
1function Hello() {
2 return <h1>Hello, React!</h1>;
3} 
(2) 组件
- 
函数组件
(推荐):
jsx
换行复制代码
1function Welcome(props) {
2 return <h1>Hello, {props.name}</h1>;
3} - 
类组件
:
jsx
换行复制代码
1class Welcome extends React.Component {
2 render() {
3 return <h1>Hello, {this.props.name}</h1>;
4 }
5} 
3. 状态与属性
(1) 使用
useState管理状态jsx
换行复制代码
1function Counter() {
2 const [count, setCount] = React.useState(0);
3 return (
4 <div>
5 <button onClick={() => setCount(count + 1)}>+</button>
6 <span>{count}</span>
7 </div>
8 );
9}(2) 传递 Props
jsx
换行复制代码
1// 父组件
2function App() {
3 return <Welcome name="Alice" />;
4}
5
6// 子组件
7function Welcome(props) {
8 return <h1>Hello, {props.name}</h1>;
9}4. 事件处理
jsx
换行复制代码
1function ButtonDemo() {
2 const handleClick = () => {
3 alert("按钮被点击了!");
4 };
5 return <button onClick={handleClick}>点击我</button>;
6}5. 条件渲染
jsx
换行复制代码
1function UserGreeting(props) {
2 return props.isLoggedIn ? <h1>Welcome back!</h1> : <h1>请登录</h1>;
3}6. 列表渲染
jsx
换行复制代码
1function TodoList() {
2 const todos = ["学习 React", "写代码", "发布项目"];
3 return (
4 <ul>
5 {todos.map((todo, index) => (
6 <li key={index}>{todo}</li>
7 ))}
8 </ul>
9 );
10}7. 使用
useEffect处理副作用jsx
换行复制代码
1function DataFetcher() {
2 const [data, setData] = React.useState(null);
3
4 React.useEffect(() => {
5 fetch("https://api.example.com/data")
6 .then((res) => res.json())
7 .then((data) => setData(data));
8 }, []); // 空依赖数组表示只在组件挂载时执行
9
10 return <div>{data ? data : "Loading..."}</div>;
11}8. 路由配置(React Router)
(1) 安装依赖
bash
换行复制代码
1npm install react-router-dom(2) 基础路由
jsx
换行复制代码
1import { BrowserRouter as Router, Route, Link } from "react-router-dom";
2
3function App() {
4 return (
5 <Router>
6 <nav>
7 <Link to="/">首页</Link>
8 <Link to="/about">关于</Link>
9 </nav>
10
11 <Route path="/" exact>
12 <Home />
13 </Route>
14 <Route path="/about">
15 <About />
16 </Route>
17 </Router>
18 );
19}9. 实战练习:待办事项列表
jsx
换行复制代码
1function TodoApp() {
2 const [todos, setTodos] = React.useState([]);
3 const [input, setInput] = React.useState("");
4
5 const addTodo = () => {
6 if (input.trim()) {
7 setTodos([ - 
 
                
            
        
浙公网安备 33010602011771号