闷骚熊猫

导航

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特性。常用的钩子有useStateuseEffectuseContext等。

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

    • 访问官网下载安装 Node.js(自带 npm 包管理工具)。

    (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([...todos, input]);
    8      setInput("");
    9   }
    10 };
    11
    12  return (
    13    <div>
    14      <input
    15        value={input}
    16        onChange={(e) => setInput(e.target.value)}
    17        placeholder="输入待办事项"
    18      />
    19      <button onClick={addTodo}>添加</button>
    20      <ul>
    21       {todos.map((todo, index) => (
    22          <li key={index}>{todo}</li>
    23       ))}
    24      </ul>
    25    </div>
    26 );
    27}

posted on 2025-03-20 15:14  闷骚熊猫  阅读(21)  评论(0)    收藏  举报