-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
React 简易模板搭建日志 #26
Comments
react-router v4 使用 history 控制路由跳转背景当我们使用 我们从 import browserHistory from 'react-router';
export function addProduct(props) {
return dispatch =>
axios.post(`xxx`, props, config)
.then(response => {
browserHistory.push('/cart'); // 这里
});
} but!! 🐛 问题来了,在 解决方案使用 withRouter
import React from "react";
import {withRouter} from "react-router-dom";
class MyComponent extends React.Component {
...
myFunction() {
this.props.history.push("/some/Path");
}
...
}
export default withRouter(MyComponent); 这是官方推荐做法哦。但是这种方法用起来有点难受,比如我们想在 就像问题章节的代码那种场景使用,我们就必须从组件中传一个 使用 Context
在子组件中使用 import React from "react";
import PropTypes from "prop-types";
class MyComponent extends React.Component {
static contextTypes = {
router: PropTypes.object
}
constructor(props, context) {
super(props, context);
}
...
myFunction() {
this.context.router.history.push("/some/Path");
}
...
} 当然,这种方法慎用~尽量不用。因为 hack其实分析问题所在,就是v3中把我们传递给 而 我们可以不使用推荐的 我们自己创建一个 // src/history.js
import createHistory from 'history/createBrowserHistory';
export default createHistory(); 我们使用 // src/index.js
import { Router, Link, Route } from 'react-router-dom';
import history from './history';
ReactDOM.render(
<Provider store={store}>
<Router history={history}>
...
</Router>
</Provider>,
document.getElementById('root'),
); 其他地方我们就可以这样用了 import history from './history';
export function addProduct(props) {
return dispatch =>
axios.post(`xxx`, props, config)
.then(response => {
history.push('/cart'); //这里
});
} 非要用BrowserRouter确实, 怎么办。 你去看看BrowserRouter的源码,我觉得你就豁然开朗了。 源码非常简单,没什么东西。我们完全自己写一个 |
react-redux 异步
本项目采用 redux-saga
参考 |
webpack 优化 |
react-scaffold
写在前面
部分技术选择:
UI:
规范:
init
创建项目需要文件夹
webpack
webpack 配置
build/
Babel
babel 中文
Babel 入门教程
开始
babel-preset-react 用于解析 JSX
babel-preset-stage-0 用于解析 ES7 提案
babel-preset-env: babel常用的转义器:相当于 es2015 ,es2016 ,es2017 及最新版本。
stage-x:
.babelrc 配置
资源处理
url-loader
file-loader
编译css
css-loader使你能够使用类似@import 和 url(...)的方法实现 require()的功能;
style-loader将所有的计算后的样式加入页面中; 二者组合在一起使你能够把样式表嵌入webpack打包后的JS文件中。
使用less
样式兼容
配置
postcss.config.js
样式文件拆分
webpack.base.config.js
配置webpack-config
webpack-dev
webpack-prod
webpack-server
webpack-dev-server
express + + webpack-dev-middleware
npm i --save-dev webpack-dev-middleware webpack-hot-middleware eventsource-polyfill express # server log npm i --save-dev rimraf
webpack-build-prod
# 终端 spinner npm i --save-dev ora rimraf chalk
webpack 其他配置
1、copy静态资源 static
2、压缩打包文件
规范
vscode + eslint
stylelint autofix
webpack-config
running
持续集成服务 Travis CI
React
react-router
react-router history跳转
redux
react-router-redux
这个包的正式版4.x不支持react-router v4。你需要用 alpha 版 的react-router-redux。在package.json 里加入react-router-redux~5.0.0或者用yarn:
redux 异步
react应用热更新
gaearon/react-hot-loader#511 (comment)
异步import, code split
配置使用
解决异步loadable引入导致react-hot-loader失效
Antd
babel-config:
定制主题
config/theme.js:
package.json:
webpack.base.config.js:
The text was updated successfully, but these errors were encountered: