npx create-react-app test
# test 为你须要建立项目的名字,会在敕令当前目次下建立test的目次,包括项目一切的文件
你已完成了建立,最先跑起来
npm start
你可以看到react已可以在local host:3000接见了,只要一个迎接页面
是当前目次装置的模块寄存的处所
index.html 是单页面的进口
可寄存本身编写的代码,App是默许天生的迎接页面逻辑,index 是js的主进口
1.将App.js的代码变动以下
import React, {Component} from 'react';
import './App.css';
class App extends Component {
constructor(props) {
super(props)
this.state = {todos: [{checked: false, text: "hello"}, {checked: true, text: "world"}]}
this.handleClick=this.handleClick.bind(this)
}
handleClick(index) {
let todos = this.state.todos
todos[index].checked = !todos[index].checked
this.setState({todos:todos})
}
render() {
let todos = this.state.todos
let todosDiv = todos.map((item, index) => {
return (
})
return (
{todosDiv}
);
}
}
class Todo extends Component {
constructor(props){
super(props)
this.handleClick=this.handleClick.bind(this)
}
handleClick() {
let index = this.props.index
this.props.handleClick(index)
};
render() {
return (
{this.props.text}:{this.props.index}
)
}
}
export default App;
四五层组件的时刻得一步一步的往上级通报,这就会致使组件通报写的很痴肥。这个时刻就须要一个将状况(即state这个值)自力开来。
装置依靠
npm install mobx --save
npm install mobx-react --save
启用装潢器语法
# 假如有git的话,要将没有保留的文件上传以后或许删除以后才跑eject敕令
yarn run eject
npm install --save-dev babel-preset-mobx
在package.json中找到babel项目,在presets内里增添”mobx”
"babel": {
"presets": [
"react-app",
"mobx"
]},
到场core-decorators
npm install core-decorators --save
在src下增添store.AppStore.js文件
import {action, observable} from "mobx";
class AppStore {
@observable todos;
constructor() {
this.todos = [{checked: false, text: "hello"}, {checked: true, text: "world"}]
}
@action.bound handleClick(index) {
let todos = this.todos
todos[index].checked = !todos[index].checked
}
}
export default AppStore;
改写index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import {Provider} from "mobx-react";
import AppStore from './store/AppStore'
let rootStore = {}
rootStore['app'] = new AppStore()
ReactDOM.render(
// 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: https://bit.ly/CRA-PWA
serviceWorker.unregister();
改写App.js
import React, {Component} from 'react';
import './App.css';
import {inject, observer} from "mobx-react";
import {autobind} from "core-decorators";
@inject("app")
@autobind
@observer
class App extends Component {
constructor(props) {
super(props)
}
render() {
let todos = this.props.app.todos
let todosDiv = todos.map((item, index) => {
return (
})
return (
{todosDiv}
);
}
}
@inject("app")
@autobind
@observer
class Todo extends Component {
constructor(props) {
super(props)
}
handleClick() {
let index = this.props.index
this.props.app.handleClick(index)
};
render() {
let index = this.props.index
let todo = this.props.app.todos[index]
return (
{todo.text}:{index}
)
}
}
export default App;
```
装置依靠
npm install react-router mobx-react-router --save
增添新的页面,在src中增添component/Test.js
welcome! import * as React from "react";
class Test extends React.Component{
render() {
return(
}
}
export default Test;
变动index.js
here is the menuimport React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import {Provider} from "mobx-react";
import AppStore from './store/AppStore'
import {Route, Router, Switch} from "react-router";
import {RouterStore, syncHistoryWithStore} from "mobx-react-router";
import createHashHistory from "history/createHashHistory"
import Test from "./component/Test"
let rootStore = {}
const hashHistory = createHashHistory()
const routerStore = new RouterStore()
const history = syncHistoryWithStore(hashHistory, routerStore)
rootStore['app'] = new AppStore()
routerStore['routing'] = routerStore
ReactDOM.render(
// 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: https://bit.ly/CRA-PWA
serviceWorker.unregister();
依据之前建立的步骤,建立前端的模块,假定模块名字为view,并在前端模块的目次下增添pom.xml
<-- Install our node and npm version to run npm/node scripts-->
<-- 指定node的版本比方 v6.9.1 -->
<-- Set NPM Registry -->
<--
<-- Set SSL privilege -->
<-- Optional configuration which provides for running any npm command -->
<-- Install all project dependencies -->
<-- optional: default phase is "generate-resources" -->
<-- Optional configuration which provides for running any npm command -->
<-- Build and minify static files -->
在spring boot后端项目中,将前端打包好的页面拷贝到后端目次中
"proxy":"http://localhost:8080/"
要领1: package.json 增添
"homepage": "."
要领2: config.paths.js文件下修正设置
function getServedPath(appPackageJson) {
const publicUrl = getPublicUrl(appPackageJson);
//将/修正为./
const servedUrl =
envPublicUrl || (publicUrl ? url.parse(publicUrl).pathname : './');
return ensureSlash(servedUrl, true);
}
const routerStore = new RouterStore()
rootStore['app'] = new AppStore()
routerStore['routing'] = routerStore
rootStore['app'] = new AppStore(rootStore)
改写AppStore.js,增添组织函数
constructor(rootStore) {
this.rootStore = rootStore
}