继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Create-React-App入门:新手必读的React应用启动指南

拉风的咖菲猫
关注TA
已关注
手记 349
粉丝 44
获赞 212
概述

本文介绍了如何使用Create-React-App入门React应用开发,提供了快速搭建React项目的工具和配置指南。文章详细讲解了Create-React-App的优势、安装配置方法以及基础组件开发技巧。通过阅读,新手可以快速掌握Create-React-App入门知识并开始构建React应用。

Create-React-App入门:新手必读的React应用启动指南
Create-React-App简介

Create-React-App是什么

Create-React-App是由Facebook维护的一个工具,用于快速搭建React应用。它提供了一套开箱即用的配置,包括开发服务器、构建工具、代码拆分等,旨在使开发者能够专注于编写React组件,而无需过多关注构建配置。

Create-React-App的优势

  • 开箱即用:无需配置复杂的构建工具,即可开始开发。
  • 开发服务器:提供一个实时重载的功能,允许开发人员快速看到更改的效果。
  • 构建优化:自动进行代码拆分、内联公共库、压缩文件等优化操作。
  • ESLint集成:自带ESLint,帮助开发者写出更规范的代码。
  • TypeScript支持:支持开发人员使用TypeScript编写React应用。
  • 环境隔离:构建工具与应用代码分离,确保应用代码的整洁。
  • 持续集成:集成了CI/CD工具,便于集成测试和持续部署。

如何安装和配置Create-React-App

安装Node.js环境。确保已安装Node.js版本8.10.0或更高版本,以及npm版本5.6.0或更高版本。

使用命令行工具安装Create-React-App:

npx create-react-app my-app
cd my-app
npm start

上述命令会创建一个名为my-app的React应用项目,并启动开发服务器。如果希望使用Yarn包管理器,可以使用以下命令:

npx create-react-app my-app --use-yarn
cd my-app
yarn start
创建第一个React应用

创建新项目

要创建一个新的React项目,可以使用Create-React-App工具,如上文所述。如果已经使用了上述命令创建了一个新的项目,那么现在可以直接进入项目文件夹进行开发:

cd my-app

项目文件结构解析

创建项目后,my-app目录下的文件结构如下:

my-app/
├── node_modules/
├── public/
│   ├── index.html
│   ├── favicon.ico
│   └── manifest.json
├── src/
│   ├── index.js
│   ├── index.css
│   ├── App.js
│   └── App.css
├── .gitignore
├── package.json
├── README.md
└── yarn.lock
  • node_modules/:保存项目依赖的目录。
  • public/:存放静态文件,如index.html
  • src/:存放应用的核心代码,包括JSX文件和样式文件。
  • package.json:存储项目依赖和脚本配置。
  • README.md:项目说明。
  • yarn.lock:Yarn包锁定文件,记录了项目的依赖版本。

运行应用和访问localhost

启动开发服务器:

npm start

程序会在默认端口3000上启动一个开发服务器,并自动打开浏览器访问http://localhost:3000,即可看到应用的初始页面。

项目实例:创建并运行一个简单的React应用

  1. 创建React项目:
npx create-react-app my-app
cd my-app
npm start
  1. 编辑src/App.js文件,替换为以下内容:
import React from 'react';
import './App.css';

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <h1>Welcome to Create-React-App</h1>
        <p>This is a simple React application created using Create-React-App.</p>
      </header>
    </div>
  );
}

export default App;
  1. src/App.css中添加一些基本样式:
.App {
  text-align: center;
}

.App-header {
  background-color: #282c34;
  padding: 2rem;
  color: white;
}
  1. 启动开发服务器,访问localhost查看结果。
基础组件开发

定义和使用组件

React应用由组件构成,组件是可重用的独立模块,可以接受输入并渲染输出。在React中,定义组件有两种方式:类组件和函数组件。

函数组件是简单且轻量的组件,用于定义功能简单的组件:

// 函数组件示例
function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

类组件则是继承React.Component类的组件,用于定义功能复杂的组件:

// 类组件示例
class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

使用组件的方式相同,将组件元素插入到其他组件或父组件中:

function App() {
  return (
    <div>
      <Welcome name="Alice" />
      <Welcome name="Bob" />
    </div>
  );
}

类组件与函数组件的区别

类组件与函数组件有以下几个主要区别:

  1. 继承类组件:类组件需要继承React.Component类,函数组件无需继承。
  2. 生命周期方法:类组件可以使用生命周期方法(如componentDidMount),函数组件无法使用。
  3. 状态管理:类组件可以定义自己的状态(this.state),函数组件需要通过React Hooks来管理状态。
  4. 性能优化:函数组件通常性能更高,因为它们不会创建额外的实例对象。

通过props传递数据

在React中,组件之间的数据传递通过props进行。props是组件接收的外部属性或数据,用于向组件传递参数。

例如,定义一个接受title属性的组件:

function Title(props) {
  return <h1>{props.title}</h.1>;
}

使用该组件并传入props

function App() {
  return (
    <Title title="Welcome to React" />
  );
}

项目实例:通过props传递数据

  1. 创建并导出一个组件,用于显示姓名:
// Greeting.js
import React from 'react';

function Greeting(props) {
  return <h1>Hello, {props.name}</h1>;
}

export default Greeting;
  1. App.js中使用Greeting组件,并传递name属性:
// App.js
import React from 'react';
import Greeting from './Greeting';

function App() {
  return (
    <div>
      <Greeting name="Alice" />
      <Greeting name="Bob" />
    </div>
  );
}

export default App;
状态管理与Redux集成

React的状态管理

React状态管理通常涉及组件内部的状态管理,以及全局状态管理。在组件内部,可以使用this.state来存储状态,并使用setState()来更新状态。

全局状态管理可以使用像Redux这样的状态管理库来实现。Redux提供了一种统一的全局状态管理方式。

安装Redux与React-Redux

要集成Redux和React-Redux,首先安装所需的库:

npm install redux react-redux

实现简单的状态管理逻辑

创建一个简单的Redux store:

// store.js
import { createStore } from 'redux';

// 定义初始状态
const initialState = {
  count: 0,
};

// 定义reducer
function counterReducer(state = initialState, action) {
  switch (action.type) {
    case 'INCREMENT':
      return { ...state, count: state.count + 1 };
    default:
      return state;
  }
}

// 创建store
const store = createStore(counterReducer);

export default store;

在应用中使用Provider组件将store传递给React应用:

// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import store from './store';
import App from './App';

ReactDOM.render(
  <React.StrictMode>
    <Provider store={store}>
      <App />
    </Provider>
  </React.StrictMode>,
  document.getElementById('root')
);

创建一个计数器组件,用于更新状态:

// Counter.js
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';

const Counter = () => {
  const count = useSelector(state => state.count);
  const dispatch = useDispatch();

  const increment = () => {
    dispatch({ type: 'INCREMENT' });
  };

  return (
    <div>
      <h1>Count: {count}</h1>
      <button onClick={increment}>Increment</button>
    </div>
  );
};

export default Counter;

App.js中使用Counter组件:

// App.js
import React from 'react';
import Counter from './Counter';

function App() {
  return (
    <div className="App">
      <Counter />
    </div>
  );
}

export default App;
样式与CSS处理

内联样式与CSS模块

内联样式是通过JSX中的style属性直接定义样式,这种方式简单但可维护性较差:

function Box(props) {
  return <div style={{ backgroundColor: 'red', width: '100px', height: '100px' }} />;
}

CSS模块通过将CSS文件名后缀改为.module.css来创建模块化CSS文件。CSS模块在编译时会为每个样式生成唯一的类名,防止样式冲突。

使用CSS模块:

// Box.module.css
.box {
  background-color: red;
  width: 100px;
  height: 100px;
}
// Box.js
import React from 'react';
import styles from './Box.module.css';

function Box() {
  return <div className={styles.box}></div>;
}

export default Box;

嵌入式样式与外部样式表

嵌入式样式是将CSS写在HTML文件的<style>标签内。这种方式便于控制单个文件的样式,但不适用于大型项目。

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
  <style>
  body {
    background-color: lightblue;
  }
  </style>
</head>
<body>
  <div id="root"></div>
</body>
</html>

外部样式表是将CSS写在单独的.css文件中,然后在HTML文件中引入。这种方式便于维护和复用。

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
  <link rel="stylesheet" href="styles.css" />
</head>
<body>
  <div id="root"></div>
</body>
</html>

使用CSS-in-JS库

CSS-in-JS库允许将样式直接写在JS中,这种方式更加灵活,支持动态样式生成和scoped样式。

使用styled-components库:

npm install styled-components
import React from 'react';
import styled from 'styled-components';

const Button = styled.button`
  background-color: red;
  color: white;
  padding: 10px 20px;
  border: none;
  border-radius: 5px;
`;

function App() {
  return (
    <Button>Click me</Button>
  );
}

export default App;
路由配置与动态导航

安装和配置React-Router

首先,安装React-Router库:

npm install react-router-dom

设置基本路由导航

在项目中使用React-Router的基本路由配置:

import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import Home from './Home';
import About from './About';
import NotFound from './NotFound';

const App = () => (
  <Router>
    <Switch>
      <Route exact path="/" component={Home} />
      <Route path="/about" component={About} />
      <Route component={NotFound} />
    </Switch>
  </Router>
);

ReactDOM.render(<App />, document.getElementById('root'));

动态加载页面组件

使用React.lazySuspense实现动态加载页面组件:

import React, { Suspense } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';

const Home = React.lazy(() => import('./Home'));
const About = React.lazy(() => import('./About'));
const NotFound = React.lazy(() => import('./NotFound'));

const App = () => (
  <Router>
    <Suspense fallback={<div>Loading...</div>}>
      <Switch>
        <Route exact path="/" component={Home} />
        <Route path="/about" component={About} />
        <Route component={NotFound} />
      </Switch>
    </Suspense>
  </Router>
);

ReactDOM.render(<App />, document.getElementById('root'));

总结,通过本指南,你可以了解如何使用Create-React-App快速启动React应用,并逐步深入学习React组件开发、状态管理、样式处理以及路由配置等内容。希望这些内容能帮助你快速入门React开发。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP