凭栏勾思 發表於 2020-7-10 14:22:00

React:创建管理后台项目demo

<p>1、全局安装create-react-app</p>
<p>npm install -g create-react-app</p>
<p>2、创建项目,安装依赖</p>
<p>create-react-app my-react-app</p>
<p>3、进入项目</p>
<p>cd my-react-app</p>
<p>4、启动项目</p>
<p>npm start</p>
<p>这是你就有了一个react demo</p>
<p>接着是对demo的改造了。。。这里是改造后的项目目录</p>
<p><img src="https://img2020.cnblogs.com/blog/1247274/202007/1247274-20200707102148112-441213334.png"></p>
<p>1、配置路由:</p>
<p>首先安装路由组件:react-router-dom</p>
<p>npm install react-router-dom --save-dev</p>
<p>router.js如下</p>
<div class="cnblogs_code">
<pre>import React, { Component } <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">react</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">

import { HashRouter, Switch, Route } </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">react-router-dom</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">

import home </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@/pages/home/home</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
import login </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@/pages/login/login</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">

export </span><span style="color: rgba(0, 0, 255, 1)">default</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> RouteConfig extends Component {
    render() {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
            </span>&lt;HashRouter&gt;
                &lt;Switch&gt;
                  &lt;Route path=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/</span><span style="color: rgba(128, 0, 0, 1)">'</span> exact component={login} /&gt;
                  &lt;Route path=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/login</span><span style="color: rgba(128, 0, 0, 1)">"</span> exact component={login}/&gt;
                  &lt;Route path=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/home</span><span style="color: rgba(128, 0, 0, 1)">"</span> exact component={home}/&gt;
                &lt;/Switch&gt;
            &lt;/HashRouter&gt;<span style="color: rgba(0, 0, 0, 1)">
      )
    }
}</span></pre>
</div>
<p>2、根目录下的index.js内容</p>
<div class="cnblogs_code">
<pre>import React <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">react</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
import ReactDOM </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">react-dom</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
import Route </span><span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./router/</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
import </span>* <span style="color: rgba(0, 0, 255, 1)">as</span> serviceWorker <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./serviceWorker</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;

import </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./assets/css/index.css</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> render = Component =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
ReactDOM.render(
    </span>&lt;Component /&gt;<span style="color: rgba(0, 0, 0, 1)">,
    document.getElementById(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">root</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
}
render(Route)

</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (module.hot) {
module.hot.accept(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./router/</span><span style="color: rgba(128, 0, 0, 1)">'</span>, () =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
    render(Route)
})
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> If you want your app to work offline and load faster, you can change
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> unregister() to register() below. Note this comes with some pitfalls.
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Learn more about service workers: </span><span style="color: rgba(0, 128, 0, 1); text-decoration: underline">https://bit.ly/CRA-PWA</span>
serviceWorker.unregister();</pre>
</div>
<p>最后是pages文件的改造:</p>
<p>1、home.jsx</p>
<p>在home.jsx中用到了immutable插件,所以我们需要install下</p>
<div class="cnblogs_code">
<pre>npm install immutable</pre>
</div>
<p>同时附上immutable的JDK:immutable详解</p>
<div class="cnblogs_code">
<pre>import React, { Component } <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">react</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
import { </span><span style="color: rgba(0, 0, 255, 1)">is</span>, fromJS } <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">immutable</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Home extends Component {
    state </span>=<span style="color: rgba(0, 0, 0, 1)"> {
      name: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">wql</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    }
    componentWillMount () {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 组件初始化时调用,更新不调用,整个生命周期只有一次,可以修改state</span>
      <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
            name: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">wql123</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
      })
    }
    componentDidMount () {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 组件渲染之后调用,只能调用一次</span>
      console.log(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">componentDidMount</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
    }
    componentWillReceiveProps () {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 组件初始化不调用,组件接收新的props时调用</span>
<span style="color: rgba(0, 0, 0, 1)">    }
    componentWillUpdate () {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 组件初始化时不调用,组件更新完成后调用,此时可以获取dom节点</span>
<span style="color: rgba(0, 0, 0, 1)">    }
    componentWillUnmount () {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 组件将要卸载时调用,一些事件监听和定时器需要在此时清除</span>
<span style="color: rgba(0, 0, 0, 1)">    }
    shouldComponentUpdate (nextProps, nextState) {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 组件判断是否需要重新渲染时调用
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> fromJS: 将纯 JS 对象和数组深层转换为不可变映射和列表
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> is: 判断是否值相等</span>
      console.log(!<span style="color: rgba(0, 0, 255, 1)">is</span>(fromJS(<span style="color: rgba(0, 0, 255, 1)">this</span>.props),fromJS(nextProps)) || !<span style="color: rgba(0, 0, 255, 1)">is</span>(fromJS(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state), fromJS(nextState)))
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> !<span style="color: rgba(0, 0, 255, 1)">is</span>(fromJS(<span style="color: rgba(0, 0, 255, 1)">this</span>.props),fromJS(nextProps)) || !<span style="color: rgba(0, 0, 255, 1)">is</span>(fromJS(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state), fromJS(nextState))
    }
    deal </span>= (val) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(val)
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
            name: val
      })
    }
    render () {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
            </span>&lt;div&gt;
                &lt;div&gt;<span style="color: rgba(128, 0, 128, 1)">11</span>{<span style="color: rgba(0, 0, 255, 1)">this</span>.state.name}&lt;/div&gt;
                &lt;a onClick={<span style="color: rgba(0, 0, 255, 1)">this</span>.deal.bind(<span style="color: rgba(0, 0, 255, 1)">this</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">12123</span><span style="color: rgba(128, 0, 0, 1)">'</span>)}&gt;click it&lt;/a&gt;
            &lt;/div&gt;<span style="color: rgba(0, 0, 0, 1)">
      )
    }
}
export </span><span style="color: rgba(0, 0, 255, 1)">default</span> Home</pre>
</div>
<p>启动项目即可,自带热更新。</p>
<p>下边提供将src根路径替换成@的方法,效果如下</p>
<p><img src="https://img2020.cnblogs.com/blog/1247274/202007/1247274-20200707144421416-1280181021.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>方法:</p>
<p>1、安装react-app-rewired&nbsp;</p>
<p>npm install react-app-rewired --save-dev</p>
<p>2、跟路径下,添加config-overrides.js,如下</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">const</span> path = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">path</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)

module.exports </span>= function <span style="color: rgba(0, 0, 255, 1)">override</span><span style="color: rgba(0, 0, 0, 1)"> (config,env) {
    config.resolve.alias </span>=<span style="color: rgba(0, 0, 0, 1)"> {
      ...config.resolve.alias,
      </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@</span><span style="color: rgba(128, 0, 0, 1)">'</span>: path.resolve(__dirname, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">src</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
    }
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> config
}</span></pre>
</div>
<p>3、修改package.json,如下</p>
<p><img src="https://img2020.cnblogs.com/blog/1247274/202007/1247274-20200707144619165-1810761746.png"></p>
<p>&nbsp;参考学习 github地址:https://github.com/shenqinglin/react-antdesign.git</p><br><br>
来源:https://www.cnblogs.com/WQLong/p/13278989.html
頁: [1]
查看完整版本: React:创建管理后台项目demo