react+redux开发详细步骤
<h2 id="articleHeader2">create-react-app基础脚手架</h2><p>借助React官方的create-react-app工具,开发人员可以从配置工作中解脱出来,无需过早关注React技术栈,通过创建一个已经完成基本配置的应用,让开发者快速开始React应用的开发:</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">install -g <span class="hljs-keyword">create-react-app</span></span></code></pre>
<p>安装结束后,就可以在终端用create-react-app命令创建工程:</p>
<pre class="hljs sql"><code><span class="hljs-keyword">create-react-app react-redux-app</span></code></pre>
<p>react-redux-app工程集成了react应用框架,在此基础上进行React应用开发,就避免了繁琐的初始配置工作。</p>
<p>进入工程目录,启动工程:</p>
<pre class="hljs properties"><code><span class="hljs-attr">cd <span class="hljs-string">react-redux-app
<span class="hljs-attr">npm <span class="hljs-string">start</span></span></span></span></code></pre>
<p>启动了一个开发模式的服务器,指向本机http://localhost:3000/</p>
<h2 id="articleHeader3">弹出webpack配置</h2>
<p>实际开发中,通常要定制webpack的配置,因此我们弹出应用的webpack配置:</p>
<pre class="hljs nginx"><code><span class="hljs-attribute">npm run eject</span></code></pre>
<p>执行完以上命令,react-redux-app下多了config和scrips目录,分别对应webpack配置和npm脚本。</p>
<h2 id="articleHeader4">安装redux相关库</h2>
<p>安装redux核心库:</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">install redux <span class="hljs-comment"><br></span></span></code></pre>
<p>直接使用redux的API会比较繁琐。react官方提供的react-redux库,可以更方便的使用redux:</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">install react-redux <span class="hljs-comment"><br></span></span></code></pre>
<p>安装babel插件transform-decorators-legacy,可以使用@connect更方便的连接UI组件与容器组件:</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">install babel-<span class="hljs-keyword">plugin-transform-decorators-legacy <span class="hljs-comment"><br></span></span></span></code></pre>
<p>安装transform-decorators-legacy插件后,需在package.json配置该插件:</p>
<pre class="hljs objectivec"><code><span class="hljs-string">"babel": {
<span class="hljs-string">"plugins": [
<span class="hljs-string">"transform-decorators-legacy"
]
}</span></span></span></code></pre>
<p>安装下redux异步调用的库redux-thunk:</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">install redux-thunk</span></code></pre>
<h2 id="articleHeader5">其他配套库</h2>
<pre class="hljs sql"><code><span class="hljs-comment">路由库react-router4
npm <span class="hljs-keyword">install react-router-dom <span class="hljs-comment">--save
<span class="hljs-comment">ajax库
npm <span class="hljs-keyword">install axios <span class="hljs-comment">--save
<span class="hljs-comment">组件属性校验库
npm <span class="hljs-keyword">install prop-types <span class="hljs-comment">--save<span class="hljs-comment"><span class="hljs-keyword"><span class="hljs-comment"><br></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h2 id="articleHeader6">配置下代理</h2>
<p>开发中,前端工程与后端API不在一个域名,为避免跨域限制,方便接口调试,需在package.json中配下代理:</p>
<pre class="hljs objectivec"><code><span class="hljs-meta"># 比如,任何ajax请求,都代理到localhost:9093域
<span class="hljs-string">"proxy": <span class="hljs-string">"http://localhost:9093"</span></span></span></code></pre>
<h2 id="articleHeader7">来一款CSS预处理器</h2>
<p>less、sass或stylus都行,这里我安装less。</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">install <span class="hljs-keyword">less-loader <span class="hljs-keyword">less <span class="hljs-comment"><br></span></span></span></span></code></pre>
<p>分别修改/config/webpack.config.dev.js和/config/webpack.config.prod.js:</p>
<pre class="hljs css"><code>{
<span class="hljs-attribute">test: /\.(css|less)$/, //这里加上less
use: [
...
{
loader: require.<span class="hljs-built_in">resolve(<span class="hljs-string">'less-loader') // 配置less-loader
}
]
}</span></span></span></code></pre>
<h2 id="articleHeader8">配合一款UI框架</h2>
<p>React开发,国内首选蚂蚁金服的antd设计,移动端的话,安装antd-mobile:</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">install antd-mobile <span class="hljs-comment"><br></span></span></code></pre>
<p>最好配置antd组件样式的按需加载,借助babel的import插件:</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">install babel-<span class="hljs-keyword">plugin-<span class="hljs-keyword">import <span class="hljs-comment"><br></span></span></span></span></code></pre>
<p>package.json中,记得配置上该插件:</p>
<pre class="hljs cs"><code><span class="hljs-string">"babel": {
<span class="hljs-string">"plugins": [
<span class="hljs-string">"transform-decorators-legacy",
[<span class="hljs-meta"><span class="hljs-meta-string">"import", { <span class="hljs-meta-string">"libraryName": <span class="hljs-meta-string">"antd-mobile", <span class="hljs-meta-string">"style": <span class="hljs-meta-string">"css" }]
]
}</span></span></span></span></span></span></span></span></span></code></pre>
<h2 id="articleHeader9">初始目录文件</h2>
<p>创建一些初始目录和文件,在入口处完成redux和router的一些基础工作:</p>
<p>创建目录/src/component</p>
<p>创建目录/src/container</p>
<p>创建目录/src/redux</p>
<p>创建/src/container/login/index.js,编辑如下:</p>
<pre class="hljs scala"><code><span class="hljs-keyword">import <span class="hljs-type">React from <span class="hljs-symbol">'react'
<span class="hljs-class"><span class="hljs-keyword">class <span class="hljs-title">Login <span class="hljs-keyword">extends <span class="hljs-title">React.<span class="hljs-title">Component {
render() {
<span class="hljs-keyword">return <h2>登录页</h2>
}
}
export <span class="hljs-keyword">default <span class="hljs-type">Login
</span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>创建/src/container/register/index.js,编辑如下:</p>
<pre class="hljs scala"><code><span class="hljs-keyword">import <span class="hljs-type">React from <span class="hljs-symbol">'react'
<span class="hljs-class"><span class="hljs-keyword">class <span class="hljs-title">Register <span class="hljs-keyword">extends <span class="hljs-title">React.<span class="hljs-title">Component {
render() {
<span class="hljs-keyword">return <h2>注册页</h2>
}
}
export <span class="hljs-keyword">default <span class="hljs-type">Register</span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>创建/src/config.js,编辑如下:</p>
<pre class="hljs javascript"><code><span class="hljs-keyword">import axios <span class="hljs-keyword">from <span class="hljs-string">'axios'
<span class="hljs-keyword">import { Toast } <span class="hljs-keyword">from <span class="hljs-string">'antd-mobile'
axios.interceptors.request.use(<span class="hljs-function"><span class="hljs-keyword">function(<span class="hljs-params">config) {
Toast.loading(<span class="hljs-string">'加载中', <span class="hljs-number">0)
<span class="hljs-keyword">return config
})
axios.interceptors.response.use(<span class="hljs-function"><span class="hljs-keyword">function(<span class="hljs-params">config) {
Toast.hide()
<span class="hljs-keyword">return config
})</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>创建/src/reducer.js,编辑如下:</p>
<pre class="hljs javascript"><code><span class="hljs-keyword">import { combineReducers } <span class="hljs-keyword">from <span class="hljs-string">'redux'
<span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">reducer(<span class="hljs-params">state = <span class="hljs-number">0, action) {
<span class="hljs-keyword">return state
}
<span class="hljs-keyword">export <span class="hljs-keyword">default combineReducers({reducer})
</span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>创建/src/app.js,编辑如下:</p>
<pre class="hljs javascript"><code><span class="hljs-keyword">import React <span class="hljs-keyword">from <span class="hljs-string">'react'
<span class="hljs-keyword">import { Route } <span class="hljs-keyword">from <span class="hljs-string">'react-router-dom'
<span class="hljs-keyword">import Login <span class="hljs-keyword">from <span class="hljs-string">'./container/login'
<span class="hljs-keyword">import Register <span class="hljs-keyword">from <span class="hljs-string">'./container/register'
<span class="hljs-class"><span class="hljs-keyword">class <span class="hljs-title">App <span class="hljs-keyword">extends <span class="hljs-title">React.<span class="hljs-title">Component {
render () {
<span class="hljs-keyword">return (
<span class="xml"><span class="hljs-tag"><<span class="hljs-name">div>
<span class="hljs-tag"><<span class="hljs-name">Route <span class="hljs-attr">path=<span class="hljs-string">"/Register" <span class="hljs-attr">component=<span class="hljs-string">{Register}><span class="hljs-tag"></<span class="hljs-name">Route>
<span class="hljs-tag"><<span class="hljs-name">Route <span class="hljs-attr">path=<span class="hljs-string">"/login" <span class="hljs-attr">component=<span class="hljs-string">{Login}><span class="hljs-tag"></<span class="hljs-name">Route>
<span class="hljs-tag"></<span class="hljs-name">div>
)
}
}
<span class="hljs-keyword">export <span class="hljs-keyword">default App</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>修改/src/index.js,编辑如下:</p>
<pre class="hljs javascript"><code><span class="hljs-keyword">import React <span class="hljs-keyword">from <span class="hljs-string">'react';
<span class="hljs-keyword">import ReactDOM <span class="hljs-keyword">from <span class="hljs-string">'react-dom';
<span class="hljs-keyword">import { createStore, applyMiddleware, compose } <span class="hljs-keyword">from <span class="hljs-string">'redux'
<span class="hljs-keyword">import thunk <span class="hljs-keyword">from <span class="hljs-string">'redux-thunk'
<span class="hljs-keyword">import { Provider } <span class="hljs-keyword">from <span class="hljs-string">'react-redux'
<span class="hljs-keyword">import { BrowserRouter } <span class="hljs-keyword">from <span class="hljs-string">'react-router-dom'
<span class="hljs-keyword">import registerServiceWorker <span class="hljs-keyword">from <span class="hljs-string">'./registerServiceWorker';
<span class="hljs-keyword">import reducers <span class="hljs-keyword">from <span class="hljs-string">'./reducer'
<span class="hljs-keyword">import <span class="hljs-string">'./config'
<span class="hljs-keyword">import App <span class="hljs-keyword">from <span class="hljs-string">'./app'
registerServiceWorker()
<span class="hljs-keyword">const store = createStore(reducers, compose(
applyMiddleware(thunk),
<span class="hljs-built_in">window.devToolsExtension ? <span class="hljs-built_in">window.devToolsExtension() : <span class="hljs-function"><span class="hljs-params">f => f
))
ReactDOM.render((
<span class="xml"><span class="hljs-tag"><<span class="hljs-name">Provider <span class="hljs-attr">store=<span class="hljs-string">{store}>
<span class="hljs-tag"><<span class="hljs-name">BrowserRouter>
<span class="hljs-tag"><<span class="hljs-name">App><span class="hljs-tag"></<span class="hljs-name">App>
<span class="hljs-tag"></<span class="hljs-name">BrowserRouter>
<span class="hljs-tag"></<span class="hljs-name">Provider>
), <span class="hljs-built_in">document.getElementById(<span class="hljs-string">'root'));</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>删除其他多余的文件,保持脚手架工程为如下结构:<br><img src="https://img2018.cnblogs.com/blog/1668287/201907/1668287-20190710091220903-1744963714.png" alt=""></p>
<p> </p>
<p>再次启动工程:</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">start</span></code></pre>
<p>访问登录页http://localhost:3000/login,显示:</p>
<p><img src="https://img2018.cnblogs.com/blog/1668287/201907/1668287-20190710091245247-2087472218.png" alt=""></p>
<p> </p>
<p>访问注册页http://localhost:3000/register,显示:</p>
<p><img src="https://img2018.cnblogs.com/blog/1668287/201907/1668287-20190710091256054-306248149.png" alt=""></p>
<p> </p>
<h2 id="articleHeader10">安装Chrome扩展</h2>
<p>访问Chrome的获取更多扩展程序 (可能要FQ)。搜索安装react-developer-tools和redux-devtools。</p>
<p>或者自己去网上下载扩展程序的crx文件,进入chrome扩展程序页面,勾选开发者模式,然后把crx文件拖进去。</p>
<p>也不必刻意学习要怎么使用,开发中自己调出来,多点几下就都明白了。</p>
<h2 id="articleHeader11">按需安装其他库</h2>
<p>其他库,视自身项目情况安装吧。比如,如果你的后端使用node服务端暴露接口API,而你又使用express框架进行node开发。那么,你需要安装express:</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">install express <span class="hljs-comment">--save</span></span></code></pre>
<p>假如你不想每次修改后端接口都重启node服务端,那么你可以安装nodemon库:</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">install -g nodemon</span></code></pre>
<p>安装了nodemon库后,用nodemon命令代替node命令启动node服务端就可以了。</p>
<p>安装node.js的消息体解析中间件:</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">install <span class="hljs-keyword">body-parser <span class="hljs-comment">--save</span></span></span></code></pre>
<p>假如你用cookie存储用户会话,可以安装node操作cookie的库cookie-parse:</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">install cookie-parser <span class="hljs-comment">--save</span></span></code></pre>
<p>如果你要在node里用DM5进行密码加密的话,你可能需要utility库:</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">install utility <span class="hljs-comment">--save</span></span></code></pre>
<p>如果有实时聊天等功能的话,可能socket库你也需要:</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">install socket.io <span class="hljs-comment">--save</span></span></code></pre>
<p>再如果,你是使用mongodb数据库,那么你要在机器上安装mongodb:</p>
<pre class="hljs sql"><code><span class="hljs-comment"># mac电脑可以用brew工具在本机安装mongodb
brew <span class="hljs-keyword">install mongodb
<span class="hljs-comment"># 完了后,你可以用以下命令启动和停止mongodb服务:
brew services <span class="hljs-keyword">start mongodb
brew services <span class="hljs-keyword">stop mongodb</span></span></span></span></span></code></pre>
<p>安装mongoose库,封装了node对mongodb的api操纵:</p>
<pre class="hljs sql"><code>npm <span class="hljs-keyword">install mongoose <span class="hljs-comment">--save</span></span></code></pre>
<p>npm里海量的库,自己按需安装去吧......</p>
<h2 id="articleHeader12">源代码托管一下</h2>
<p>去github上创建下远程仓库react-redux-app。<br>然后在工程目录下执行以下命令,关联上远程仓库:</p>
<pre class="hljs properties"><code><span class="hljs-attr">git <span class="hljs-string">init
<span class="hljs-attr">git <span class="hljs-string">remote add origin 你的地址
<span class="hljs-attr">git <span class="hljs-string">push -u origin master</span></span></span></span></span></span></code></pre>
</div>
<div id="MySignature" role="contentinfo">
如有bug 请务必点出<br><br>
来源:https://www.cnblogs.com/tdtdttd/p/11161735.html
頁:
[1]