react项目创建流程

react 项目搭建

系统: windows

1.安装 node

node 下载地址.一路 next

如果遇到 windows 没有权限安装 msi 文件.打开 cmd,运行msiexec /package 文件路径.

查看是否安装成功,打开终端


node -v
npm -v

2.安装 vscode 编辑器

vscode 下载地址.一路 next

3.安装 react 项目脚手架

打开终端


npm install -g create-react-app

4.创建 react 项目


create-react-app myApp
cd myApp
npm install
npm start
code .

5.安装项目依赖


npm i react-router-dom mobx mobx-react axios qs --save

配置装饰器语法支持


npm i --save-dev @babel/plugin-proposal-class-properties @babel/plugin-proposal-decorators

解压 webpack 配置


npm run eject

修改webpack.config.dev.jswebpack.config.prod.js


{
    test: /\.(js|mjs|jsx|ts|tsx)$/,
    include: paths.appSrc,
    loader: require.resolve(‘babel-loader‘),
    options: {
        customize: require.resolve(‘babel-preset-react-app/webpack-overrides‘),

        plugins: [
+           [‘@babel/plugin-proposal-decorators‘, { legacy: true }],
+           [‘@babel/plugin-proposal-class-properties‘, { loose: true }],
            [
                require.resolve(‘babel-plugin-named-asset-import‘),
                {
                    loaderMap: {
                        svg: {
                            ReactComponent: ‘@svgr/webpack?-prettier,-svgo![path]‘
                        }
                    }
                }
            ]
        ],
        // This is a feature of `babel-loader` for webpack (not Babel itself).
        // It enables caching results in ./node_modules/.cache/babel-loader/
        // directory for faster rebuilds.
        cacheDirectory: true,
        // Don‘t waste time on Gzipping the cache
        cacheCompression: false
    }
}

6.配置路由

在项目中新建src\pages文件夹.
新建页面文件src\pages\Home\index.js


// Home\index.js

/**
 * @name Home
 * @desc 首页
 */

import React, { Component } from ‘react‘

class Home extends Component {
    render() {
        return (
            <div>
                <h1>Home</h1>
            </div>
        )
    }
}

export default Home

新建router.js


/**
 * @name Router
 * @desc 页面路由配置
 */

import React, { Component } from ‘react‘
import { Switch, Route, Redirect } from ‘react-router-dom‘
import Home from ‘./pages/Home‘

class Router extends Component {
    render() {
        return (
            <Switch>
                <Redirect path="/" to="/home" exact />
                <Route path="/home" component={Home} />
            </Switch>
        )
    }
}

export default Router

7.配置 http 请求插件

新建src\utils\axios.js


import axios from ‘axios‘
import qs from ‘qs‘

const axiosIns = axios.create({
    baseURL: ‘/‘,
    timeout: 10000,
    responseType: ‘json‘,
    transformRequest: [data => qs.stringify(data)],
    headers: {
        ‘Content-Type‘: ‘application/x-www-form-urlencoded;charset=utf-8‘
    }
})

axiosIns.interceptors.request.use(
    config => {
        return config
    },
    error => Promise.reject(error)
)

axiosIns.interceptors.response.use(result => result.data, error => Promise.reject(error))

const get = (url, params = null, config = {}) => axiosIns.get(url, { ...config, params })
const post = axiosIns.post
const all = axiosIns.all
export { get, post, all }

8.配置状态管理插件

8.1 新建src\utils\mobx-store.js


/**
 * @name Store
 * @desc store 构造器
 */

import { action, configure } from ‘mobx‘

configure({ enforceActions: ‘observed‘ })

class Store {
    constructor(modules) {
        Object.keys(modules).forEach(moduleName => {
            this[moduleName] = new modules[moduleName]({
                mapStore: this.mapStore.bind(this),
                rootState: this.rootState
            })
        })
    }

    rootState = {}

    mapStore(moduleName) {
        if (moduleName) {
            return this[moduleName] ? this[moduleName] : console.error(new Error(`has no store named "${moduleName}"`))
        } else {
            return this
        }
    }
}

let $mapStore = null
let $rootState = null

class StoreModule {
    constructor({ mapStore, rootState }) {
        $mapStore = mapStore
        $rootState = rootState
    }

    mapStore(name) {
        return $mapStore(name)
    }

    getRootState() {
        return $rootState
    }

    setState(options) {
        action(opt => {
            Object.keys(opt).forEach(key => {
                if (Object.prototype.hasOwnProperty.call(this, key)) {
                    this[key] = opt[key]
                } else {
                    console.error(new Error(`mobx action "setState": has no attribute named "${key}"`))
                }
            })
        })(options)
    }
}

export { Store, StoreModule }

8.2 创建一个状态模块,新建src\store\test-store.js


/**
 * @name Test
 * @desc
 */

import { observable, action, configure } from ‘mobx‘
import { StoreModule } from ‘../utils/mobx-store‘

configure({ enforceActions: ‘observed‘ })

class Test extends StoreModule {
    @observable
    msg = ‘‘

    @action.bound
    handleChangeMsg(e) {
        this.setState({ msg: e.target.value })
    }
}

export default Test

8.3 配置 store

新建src\store\index.js


/**
 * @name Store
 * @desc 合并全部子模块的store
 */

import { Store } from ‘../utils/mobx-store‘
import Test from ‘./test-store.js‘

export default new Store({ Test })

9.注入 router 和 store

修改index.js


import React from ‘react‘
import ReactDOM from ‘react-dom‘
import { BrowserRouter } from ‘react-router-dom‘
import { Provider } from ‘mobx-react‘
import store from ‘./store‘
import App from ‘./App‘

ReactDOM.render(
    <Provider {...store}>
        <BrowserRouter>
            <App />
        </BrowserRouter>
    </Provider>,
    document.getElementById(‘root‘)
)

修改App.js


import React, { Component } from ‘react‘
import Routes from ‘./router‘

class App extends Component {
    render() {
        return (
            <div classes="container">
                <Routes />
            </div>
        )
    }
}

export default App

修改src\pages\Home\index.js


/**
 * @name Home
 * @desc 首页
 * @author
 * @version
 */

import React, { Component } from ‘react‘
import { inject, observer } from ‘mobx-react‘

@inject(‘Test‘)
@observer
class Home extends Component {
    render() {
        return (
            <div>
                <h1>Home</h1>
                <p>msg: {this.props.Test.msg}</p>
                <p>
                    <input type="text" value={this.props.Test.msg} onChange={this.props.Test.handleChangeMsg} />
                </p>
            </div>
        )
    }
}

export default Home

11.http 请求例子


// src\store\test-store.js

/**
 * @name Test
 * @desc
 */

import { observable, action, configure } from ‘mobx‘
import { StoreModule } from ‘../utils/mobx-store‘
import { post } from ‘../utils/axios‘

configure({ enforceActions: true })

class Test extends StoreModule {
    @observable
    msg = ‘‘

    @action.bound
    handleChangeMsg(e) {
        this.setState({ msg: e.target.value })
    }

    @action.bound
    async getSomething() {
        try {
            const res = await post(‘/some-data‘, { type: ‘news‘ })
        } catch (err) {
            console.error(err)
        }
    }
}

export default Test

12.打包


npm run build

安装本地服务器启动工具


npm install -g serve

启动打包的项目


serve -s ./build

来源:https://segmentfault.com/a/1190000017109354

原文地址:https://www.cnblogs.com/thatme/p/10152642.html

时间: 2024-08-02 20:30:36

react项目创建流程的相关文章

DJANGO 学生管理系统项目创建流程 -- 单表管理

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px ".PingFang SC"; color: #454545 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545; min-height: 14.0px } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; f

Django 使用数据库的项目创建流程

1.创建项目 F:\>django-admin.py startproject csvt03 2.切换目录 F:\>cd csvt03 3.创建项目 F:\csvt03>django-admin.py startapp blog 4.配置文件 sittings.py 添加应用让框架找到 sittings.py 配置数据库参数 ENGINE :数据库类型 NAME:数据库名字(数据库自己去创建) 主机和端口使用默认可以不填 5.创建类Employee,相当于在上面配置的csvt数据库中创建

【Android Studio探索之路系列】之五:Android Studio项目创建

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell 首先阐述一下在Android Studio项目创建中涉及的两个概念. Project:工作空间 Module:具体的项目 对应关系 在 Eclipse 中,我们可以同时对多个Project进行同时编辑,这些 Project 在同一个Workspace之中.在Android St

【学习】reactjs(一)——使用npm创建react项目并整合elementUI

在实习的过程中了解了react,所以打算使用react搭建一个属于自己的页面,如有问题请教正,谢谢. Github:https://github.com/yclxt/react-elementUI 工具: 使用工具:nodejs:Jetbrains WebStorm nodejs的安装和配置环境变量这里就不写了. 创建过程: 命令行安装全局create-react-app脚手架工具:npm install -g create-react-app 定位到工作目录下,创建项目:create-reac

创建第一个react项目

由于新项目的缘故,接触了一下React这个 Javascript 库.下面我就简单的总结一下经验以及遇到的一些问题,希望能够帮到需要的朋友. 一.安装 Node.js. 以下是我百度云盘的分享. https://pan.baidu.com/s/1ftU3mn2jN9bnOGevMdcrDg     提取码:wow3 二.安装cnpm cmd命令:npm install -g cnpm --registry=https://registry.npm.taobao.org 三.安装yarn cmd命

脚手架创建一个React项目

一.安装 1.安装node.js 官网地址 https://nodejs.org/en/ 进入后点击下载,官方网站会根据你的系统类型推荐最适合你安装的版本.(如果已经安装了node.js跳过此步)如下图 : 点击即可下载. 检测node.js是否安装成功,最直接有效的办法就是在命令提示符中输入 node -v 如下图 如果出现node的版本号则表示安装成功,可以看到我的node版本是10.15.3. 2.全局安装: 安装淘宝镜像 这样做的目的是使用国内的服务器下载速度快一点. npm insta

如何从0创建一个react项目

1. 确保本机电脑安装了yarn和node: 2. 在需要安装的文件夹目录下输入:create-react-app  +(项目名称): PS:上图使用的软件为webStorm 3. 此时一个简单的react项目就已经创建好了, react 项目目录下的文件的意思: ①. public: 文件夹中是 index.html存放目录,也就是React根页面的所在地 ②. src: 用于存放js文件,也就是项目开发中的主要区域 ③. package.json: 用于记录项目信息,以及外部依赖包的导入信息

React 脚手架创建项目

使用react脚手架创建项目 一.首先需要安装node.js 具体如何安装参考网址:https://www.jianshu.com/p/0ddecdbb4048 下载安装包 双击打开安装文件 setup 点击next,下一步 勾选 选中勾选框,点击next,下一步 安装路径 选择安装路径,默认路径即可,点击next,下一步 安装配置 默认即可,点击next,下一步 安装开始 点击install,开始等待安装 安装中 点击finish,安装完成 finish 打开命令提示符窗口,输入 node -

django的项目创建简明流程

个人理解,不妥之处请指出 创建项目:django-admin startproject user_sys 创建APP:python manage.py startapp auth 测试项目创建是否成功:localhost:8000 It Works! #注册APP到settings中 设置templates路径:'DIRS': [os.path.join(BASE_DIR,'templates')], 创建数据模型models 进行数据迁移python manage.py migrate 数据模