React路由
操作下来,真心觉得,没有 Vue 路由好用。。。。
1、 安装 路由
npm install --save react-router-dom
2、在src下创建router 文件夹并创建index.js 来管理你的路由;
import Login from '../modules/login/login'; // 定义的模块
import Main from '../modules/main/mian';
import Page1 from '../components/Page1 ';
import Page2 from '../components/Page2';
import React from 'react';
import {Route,Switch} from 'react-router-dom';
class RouterConfig extends React.Component{
render(){
return(
<Switch>
<Route path='/' exact component={Page1}/>
// main嵌套路由 ,不使用可以去掉
<Route path="/main" render={() =>
<Main>
<Route exact path="/main" component={Page1} />
<Route path="/main/Page2" component={Page2} />
</Main>
}/>
<Route path='/login' exact component={Login}/>
</Switch>
)
}
}
export default RouterConfig;
使用嵌套路由: mian.js 如下:
import React from 'react';
import {NavLink,withRouter} from 'react-router-dom';
class Main extends React.Component {
constructor(props) {
super(props);
this.state={ }
}
render() {
return (
<div> 主页
<div>
<h2>Topics</h2>
<NavLink to='/main'> Page1</NavLink> // Navlink 跳转路由
<NavLink to='/main/Page2'> Page2</NavLink>
{this.props.children} // 表示router/index.js 嵌套路由数据
</div>
</div>
);
}
}
export default withRouter(Main);
3、将路由数据加载 APP.js 中;
import React from 'react';
import './App.css';
import RouterConfig from './router/index';
import {HashRouter } from 'react-router-dom';
import {createBrowserHistory} from 'history'
const history = createBrowserHistory();
function App() {
return (
<div className="App">
<HashRouter history={history} >
<RouterConfig/>
</HashRouter>
</div>
);
}
export default App;
测试,即可。
通过js 控制跳转路由:
this.props.history.push('/main/Page2'); //不带参数
this.props.history.push({ pathname: "/PutForwardSubmit", state: { vcode } }); // 带参数
this.props.location.state.vcode 获取参数
Redux简单应用
简单实现,修改,获取数据管理数据。跟vuex一样吧。
1、 安装 redux
npm install --save redux
2、 在src创建store文件夹并创建 reducer.js,管理数据
const defaultState = {
inputValue : '默认',
}
export default (state = defaultState,action)=>{ //就是一个方法函数
if(action.type === 'editinputValue' ){
let newState = JSON.parse(JSON.stringify(state))
newState.inputValue = '修改'
return newState
} // 触发dispatch 事件,这里可以修改数据,删除。
return state
}
3、在store文件夹创建index.js,实例redux 的对象
import { createStore } from 'redux' // 引入createStore方法
import reducer from './reducer'
const store = createStore(reducer) // 创建数据存储仓库
export default store //暴露出去
4、读取数据
import store from '../../store' // 引用刚才创建的store
store.getState() // 获取所有数据
5、修改
var action = {
type:'editinputValue',
index:'1'
}
store.dispatch(action) // 对应着 ( 步骤 2 )
完成。
aixos封装
1、安装
npm install axios;
2、创建 HttpClients.js
// 1. 引入 axios
import axios from 'axios'
// 2. 创建axios对象,配置默认配置
const httpRequest = axios.create({
baseURL: 'http://192.168.16.96/apis/', // api的base_url
timeout: 15000 // 请求超时时间
})
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
// 3. 创建 request拦截器
httpRequest.interceptors.request.use(config => {
return config
}, error => {
Promise.reject(error)
})
// 4. 创建response 拦截器
httpRequest.interceptors.response.use(response => response, error => {
if (error && error.response) {
switch (error.response.status) {
case 400:
error.message = '请求错误'
break
case 403:
error.message = '权限不足,请联系管理员'
break
case 404:
error.message = `请求地址出错: ${error.response.config.url}`
break
case 500:
error.message = error.response.data.errorMsg
break
default:
error.message = '服务器内部错误'
}
}
return Promise.reject(error)
})
// 5. 暴露出去
export default httpRequest
3、创建 api.js
import httpRequest from '../../utils/HttpClients' // 引用 HttpClients
export function handApiLogin (data) {
return httpRequest({
url: '/login', // 接口
method: 'post', // 请求方式
data // 参数
})
}
4、使用
import { handApiLogin } from './api' // 先引用
// 在函数中调用
let params = {}
handApiLogin(params).then((res)=>{
console.log('login res:', res)
})
总结
1、 React 路由就是个坑。本人打包部署服务器时,跳转路由后刷新一直空白。 看帖子说 将
try_files $uri $uri/ /index.html;
放 nginx 配置下,无果。。。。百般折腾下,终于找到 blog.csdn.net/weixin_3916… 解决方法。将路由换成hash的方式就可以了。
2、React 一切皆js。