[react]react创建app,路由,mobx 全教程
1、创建app,
npx create-react-app my-app
Cmd
Copy
2、进入项目目录
cd my-app
Cmd
Copy
3、启用配置文件(默认是不开启配置文件的)
yarn eject
Cmd
Copy
这时候会报错,意思大概是你要把之前的文件最好提交一下git
git add --all
git commit -m 'up'
Cmd
Copy
yarn eject
Cmd
Copy
4、提示 成功
success Saved lockfile.
Ejected successfully!
Cmd
Copy
5、启动项目(不启动配置文件也能启项目,但最好把配置打开,这样你可以更多的扩展)
这时候报错:Cannot find module XXXX 基本的意思就是什么什么包 没有。
以前是没有这个错的,现在估计新加的,大概意思是新找开了配置(eject)后再需要安装一下
npm install
Cmd
Copy
此命令是根据package.json重新安装一下包,此命令,如果是别人的项目没有node_modules 是无法启动项目,需要npm install 后 就可以正常打开别人的项目,这主要是因为node_modules太大,一般都不会git上传。
这个时间有点久,可以把npm 改成cpm 自行(搜索,百度、bing、谷歌啥都行)
yarn start
Cmd
Copy
Compiled successfully!
You can now view my-app in the browser.
Local: http://localhost:3000/
On Your Network: http://192.168.50.143:3000/
Note that the development build is not optimized.
To create a production build, use yarn build.
Tip
Copy
ok.
接下来,是sass安装,现在没有直接写css的了,(ps:less,postcss都行,此文介绍的是sass)
1、sass 安装
yarn add node-sass-chokidar
Cmd
Copy
找到package.json中的scripts位置 替换成以下代码
"scripts": {
"build-css": "node-sass-chokidar src/ -o src/",
"watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive",
"start-js": "node scripts/start.js",
"start": "npm-run-all -p watch-css start-js",
"build-js": "node scripts/build.js",
"build": "npm-run-all build-css build-js",
"test": "node scripts/test.js --env=jsdom"
},
Node
Copy
进行src目录,mkdir styles vi index.scss(就是sass 有两个后缀,就是写法不同,我们常用scss后缀)
进行src/index.js
增加以下代码(在原样式文件下)
import './index.css';(原样式文件)
import './styles/index.css';
Es6
Copy
warn:/bin/sh: npm-run-all: command not found
yarn add npm-run-all
yarn start
Cmd
Copy
index.scss 增加以下代码
body {
background: red;
}
CSS
Copy
其实这时候你以已经发现了index.scss 一个并列文件index.css 而我们上面imPort时也是index.css 这就是编译后的文件,虽然写的是scss 但引入的还是css
没看出效果,你需要把原来的app.css 和index.css 的代码注释掉就可以看到
此时sass 已生效。
报错 App.js:5 Uncaught ReferenceError: React is not defined
在app.js 中添加如下代码
import React, {Component} from 'react';
JavaScript
Copy
路由:router
ctrl +c 终止任务
1、添加路由模块
yarn add react-router-dom
Cmd
Copy
2、添加路由Router.jsx(react 中基本都是jsx后缀文件)
代码内容:
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter, HashRouter} from 'react-router-dom';
import App from './App.js';
const Router = () => (
)
export default Router;
React
Copy
3、react-hot-loader 官网解释
React Hot Loader is a plugin for Webpack that allows instantaneous live refresh without losing state while editing React components.
按我们理解就是自动更新的
yarn add react-hot-loader
Cmd
Copy
4、App.js
import React, { Component } from 'react';
import { hot } from 'react-hot-loader';
import { withRouter,NavLink,Switch,Redirect,Route} from 'react-router-dom';
import home from './views/home/';
import otc from './views/otc/';
class App extends Component {
constructor(props) {
super(props);
}
componentDidMount(){
}
render() {
// return this.props.children;
return (
)
}
}
export default hot(module)(App);
React
Copy
5、index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './styles/index.css';
import Router from './Router';
import * as serviceWorker from './serviceWorker';
ReactDOM.render(, document.getElementById('root'));
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: http://bit.ly/CRA-PWA
serviceWorker.unregister();
React
Copy
6、mkdir views/home views/otc
views/home/index.jsx
import React, { Component } from 'react';
import { withRouter,NavLink} from 'react-router-dom';
class Home extends Component {
constructor(props) {
super(props);
}
render() {
return (
home
otc
)
}
}
export default Home;
React
Copy
views/otc/index.jsx
import React, { Component } from 'react';
import { withRouter,NavLink} from 'react-router-dom';
class Home extends Component {
constructor(props) {
super(props);
}
render() {
return (
otc
home
)
}
}
export default Home;
home 就是路由切换的意思
React
Copy
8、yarn start
稍后贴github 代码地址(https://github.com/llqfront/react/tree/master/my-app1 为源码 。稍后上传my-app 为完整)希望你是把按步骤操作一次,没有的代码上github 上取,
mobx 简单、可扩展的状态管理(https://cn.mobx.js.org/)
1、需要安装
yarn add mobx
yarn add mobx-react
Cmd
Copy
2、需要处理错误,错误代码如下(意思就是不支持这个装饰符)
SyntaxError: /Users/hello/workspace/fe.youdeal.io/app/my-app/src/store/otc.js: Support for the experimental syntax 'decorators-legacy' isn't currently enabled (3:5):
1 | import {observable, computed, action} from 'mobx';
2 | class Store {
> 3 | @observable tradeCfg = {
| ^
4 | 'sadf':'sadf'
5 | };
6 | @observable baseInfo = {};
Tip
Copy
还有挺爱报错的,可算解决了;
解决参考地址:
1、https://babeljs.io/docs/en/babel-plugin-proposal-decorators
2、https://github.com/babel/babel/issues/8562
3、https://github.com/facebook/react-native/issues/21320
4、https://github.com/mobxjs/mobx-react/issues/506
5、https://github.com/zeit/next.js/issues/5231
6、https://github.com/ant-design/ant-design-pro/issues/2043
7、https://segmentfault.com/q/1010000016473651
这个问题以前是很好解决,现在有点问题,当然不是最优,但也可以。
3、.babelrc 文件 与src 并列
{
"presets": [
["@babel/preset-react"]
],
"plugins": [
["@babel/plugin-proposal-decorators", {"legacy": true }],
["@babel/plugin-proposal-class-properties", { "loose" : true }]
]
}
yarn add @babel/plugin-proposal-decorators
yarn add @babel/plugin-proposal-class-properties
yarn add mobx
yarn add mobx-react
Node
Copy
文件都有改动,据体看源码(router.jsx app.js home otc 都有修改 就不贴出来了)
当然当然 使用mobx 做项目是非常方便的
yarn start
https://github.com/llqfront/react/tree/master/my-app
mobx 会有以下几个问题
第一是装饰符,那就使用.babelrc(对应模块安装)
当使用.babelrc 后 出提示mobx 找不到,再把mobx mobx-react 安装一下就行了 要打不开,
[react]react创建app,路由,mobx 全教程的更多相关文章
- IntelliJ IDEA 创建Web项目(全教程)
说明:IntelliJ IDEA 版本为14.JDK 版本为1.7tomcat 版本为apache-tomcat-7.0.70 注:在创建过程中注意相关软件版本位数的问题.32位,64位的软件混搭会导 ...
- 如何用 React Native 创建一个iOS APP?(二)
我们书接上文<如何用 React Native 创建一个iOS APP?>,继续来讲如何用 React Native 创建一个iOS APP.接下来,我们会涉及到很多控件. 1 AppRe ...
- 如何用 React Native 创建一个iOS APP?
诚然,React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iOS 和 Android 原生应用.在 JavaScript 中用 Reac ...
- 如何用 React Native 创建一个iOS APP?(三)
前两部分,<如何用 React Native 创建一个iOS APP?>,<如何用 React Native 创建一个iOS APP (二)?>中,我们分别讲了用 React ...
- React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块
尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...
- React+DvaJS 之 hook 路由权限控制
博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP 活动 招聘 ITeye 写博客 发Chat 登录注册 原 React+DvaJS 之 hook 路由权限控制 20 ...
- 七天接手react项目 系列 —— react 脚手架创建项目
其他章节请看: 七天接手react项目 系列 react 脚手架创建项目 前面我们一直通过 script 的方式学习 react 基础知识,而真实项目通常是基于脚手架进行开发. 本篇首先通过 reac ...
- React脚手架创建一个React应用以及项目目录结构详解
react脚手架 用来帮助程序员快速创建一个基于xxx库的模板项目,包含了所有需要的配置,指定好了所有的依赖,可以直接安装/编译/运行一个简单效果 react提供了一个专门用于创建react项目的脚手 ...
- React Native发布APP之打包iOS应用
用React Native开发好APP之后,如何将APP发布以供用户使用呢?一款APP的发布流程无外乎:签名打包—>发布到各store这两大步骤.本文将向大家分享如何签名打包一款React Na ...
随机推荐
- NLP获取词向量的方法(Glove、n-gram、word2vec、fastText、ELMo 对比分析)
自然语言处理的第一步就是获取词向量,获取词向量的方法总体可以分为两种两种,一个是基于统计方法的,一种是基于语言模型的. 1 Glove - 基于统计方法 Glove是一个典型的基于统计的获取词向量的方 ...
- C/C++ Qt MdiArea 多窗体组件应用
MDI多窗体组件,主要用于设计多文档界面应用程序,该组件具备有多种窗体展示风格,其实现了在父窗体中内嵌多种子窗体的功能,使用MDI组件需要在UI界面中增加mdiArea控件容器,我们所有的窗体创建与操 ...
- IEnumerator vs Iterator
IEnumerator vs Iterator IEnumerator 不考虑Reset方法和原始列表的可变性,NoveNext和Current的只读向前用法: Initially, the enum ...
- 如何在 ShardingSphere 中开发自己的 DistSQL
在<DistSQL:像数据库一样使用 Apache ShardingSphere>和<SCTL 涅槃重生:投入 RAL 的怀抱>中,已经为大家介绍了 DistSQL 的设计初衷 ...
- AT3945 [ARC092D] Two Faced Edges
要求,翻转一条边,强连通分量个数是否会改变. 考虑连通分量个数会改变的因素: 即\(v\to u\)是否成立,以及翻转前,是否有一条\(u \to v\)的路径不经过该条边 以上当只有一个满足时,连通 ...
- 2021-2-3-利用anaconda+prefetch+aspera从NCBI的SRA数据库中下载原始测序数据
目录 1.Conda连接不上镜像源问题 2. aspera不能再独立使用 3.使用prefetch搭配aspera 4. prefetch下载方法 记录下下载过程,为自己和后人避坑. 1.Conda连 ...
- 【Redis集群原理专题】分析一下相关的Redis集群模式下的脑裂问题!
技术格言 世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程. 什么是脑裂 字面含义 首先,脑裂从字面上理解就是脑袋裂开了,就是思想分家了,就是有了两个山头,就是有了 ...
- Linux网络(网络模型和收发流程)
网络模型 为了解决网络互联中异构设备的兼容性问题,并解耦复杂的网络包处理流程,国际标准化组织制定的开放式系统互联通信参考模型(Open System Interconnection Reference ...
- flink---实时项目--day01--1. openrestry的安装 2. 使用nginx+lua将日志数据写入指定文件中 3. 使用flume将本地磁盘中的日志数据采集到的kafka中去
1. openrestry的安装 OpenResty = Nginx + Lua,是⼀一个增强的Nginx,可以编写lua脚本实现⾮非常灵活的逻辑 (1)安装开发库依赖 yum install -y ...
- 轻松理解webpack热更新原理
一.前言 - webpack热更新 Hot Module Replacement,简称HMR,无需完全刷新整个页面的同时,更新模块.HMR的好处,在日常开发工作中体会颇深:节省宝贵的开发时间.提升开发 ...