React 实践项目 (一)
来源:互联网 发布:13458淘宝信用查询 编辑:程序博客网 时间:2024/06/03 11:38
React在Github上已经有接近70000的 star 数了,是目前最热门的前端框架。而我学习React也有一段时间了,现在就开始用 React+Redux 进行实战!
项目代码地址:https://github.com/DigAg/digag-pc-react
- ### 首先,我们开始构建一个基础项目。
我们使用create-react-app创建项目,不需要安装或配置Webpack或Babel等工具。它们被预先配置和隐藏,以便我们可以专注于代码。
- 在本地全局安装create-react-app(需要安装Node.js且版本 >= 6,也可使用 yarn 代替 npm)
npm install -g create-react-app
- 创建项目
create-react-app digag cd digag
- 检查是否成功创建digag文件夹与相关文件
digag├── README.md├── node_modules├── package.json├── .gitignore├── public│ └── favicon.ico│ └── index.html│ └── manifest.json└── src └── App.css └── App.js └── App.test.js └── index.css └── index.js └── logo.svg └── registerServiceWorker.js
- 在开发模式下运行应用程序,访问localhost:3000在浏览器中查看。
npm start or yarn start
这样我们就成功创建好一个可以直接运行的React项目了!
接下来,开始编写代码了!
首先我们打开 src 目录下的 App.js 文件,删除掉默认生成的代码。输入以下代码:
/** * Created by Yuicon on 2017/6/25. */import React, { Component } from 'react';import Header from "../../components/Index/Header";import './App.css';export default class App extends Component { componentDidMount() { console.log(this.props.users) } render(){ return( <div className="App"> <div className="App-header"> <Header/> </div> <div className="App-body"> <div className="welcome-view"> <div className="category-nav"> <div>1adasdasdasdasdasd1adasdasdasdasdasd1adasdasdasdasdasd1adasdasdasdasdasd</div> </div> <div className="main"> 21adasdasdasdasdasd1adasdasdasdasdasd1adasdasdasdasdasd1adasdasdasdasdasd1adasdasdasdasdasd </div> <div className="sidebar"> 31adasdasdasdasdasd1adasdasdasdasdasd1adasdasdasdasdasd1adasdasdasdasdasd1adasdasdasdasdasd </div> </div> </div> </div> ) }}
同样,编辑 App.css 文件:
html { font-size: 12px; font-family: -apple-system,PingFang SC,Hiragino Sans GB,Arial,Microsoft YaHei,Helvetica Neue,sans-serif; text-rendering: optimizeLegibility; background-color: #f4f5f5; color: #333; word-break: break-all;}.App { text-align: center;}.App-header { position: relative; height: 5rem;}.main-header { background: #fff; border-bottom: 1px solid #f1f1f1; color: #909090; height: 5rem; z-index: 250; position: fixed; top: 0; left: 0; right: 0; transition: all .2s;}.main-header .visible { transform: translateZ(0);}.container { display: flex; align-items: center; height: 100%; position: relative; width: 100%;}.main-header .container { max-width: 960px; min-width: 960px; margin: auto;}.logo { margin-right: 2rem;}.logo-img { border-style: none;}.nav-menu ul{ background-color: white;}.nav-menu ul li{ font-size: 1.33rem;}.nav-menu ul li:hover{ border-bottom: 0 solid white !important; background-color: white !important;}.nav-menu button{ margin-left: 0 !important; font-weight: 500; font-size: 1.3rem;}.contribute {}.contribute:after{ content: "|"; position: absolute; top: 24px; left: 100%; color: hsla(0,0%,59%,.4);}.login-btn {}.login-btn:after { content: "\B7"; margin: 0 .4rem;}.register-dialog { padding: 2rem; width: 26.5rem !important; max-width: 100%; font-size: 1.167rem; box-sizing: border-box;}.App-body { position: relative; margin: 0 auto; width: 100%; max-width: 960px; height: 100vh;}.welcome-view { position: relative; display: flex; justify-content: space-between; margin-top: 1.767rem;}.category-nav { background-color: #db1f00; width: 140px; position: fixed; top: 6.66rem;}.main { background-color: #08c6a7; width: 560px; margin-left: 13rem;}.sidebar { background-color: #e3e001; width: 19.2rem; box-sizing: border-box;}
可能已经有同学注意到了,我们在 App.js 里导入了一个目前还不存在的组件。现在,我们来创建它:
- 首先,创建 src/components/Index 目录,在该目录下创建 Header.js 。
digag├── README.md├── node_modules├── package.json├── .gitignore├── public│ └── favicon.ico│ └── index.html│ └── manifest.json└── src └── components └── Index └── Header.js └── App.css └── App.js └── App.test.js └── index.css └── index.js └── logo.svg └── registerServiceWorker.js
编辑 Header.js 文件
/** * Created by Yuicon on 2017/6/25. */import React, {Component} from 'react';import {Button, Input, Menu} from "element-react";export default class Header extends Component { constructor(props) { super(props); this.state = { searchInput: '', }; } handleSelect = (index) => { console.log(index); }; handleIconClick = () => { console.log('handleIconClick', this.state.searchInput); }; render() { return ( <header className="main-header visible"> <div className="container"> <a href="/" className="logo"> <img src="//gold-cdn.xitu.io/v3/static/img/logo.a7995ad.svg" alt="掘金" className="logo-img"/> </a> <div className="nav-menu"> <Menu defaultActive="1" mode="horizontal" onSelect={this.handleSelect}> <Menu.Item index="1">首页</Menu.Item> <Menu.Item index="2">专栏</Menu.Item> <Menu.Item index="3">收藏集</Menu.Item> <Menu.Item index="4">发现</Menu.Item> <Menu.Item index="5">标签</Menu.Item> <Menu.Item index="6"> <Input size="small" icon="search" placeholder="搜索掘金" onIconClick={this.handleIconClick} onChange={(value) => this.setState({searchInput: value})} /> </Menu.Item> <Menu.Item index="7"> <Button type="text" icon="edit" className="contribute">投稿</Button> </Menu.Item> <Menu.Item index="8"> <Button type="text" className="login-btn" onClick={ () => console.log('登录') }>登录</Button> <Button type="text" onClick={ () => console.log('注册') }>注册</Button> </Menu.Item> </Menu> </div> </div> </header> ) }}
- 我们在 Header.js 文件里导入了 element-react UI库的组件, 所以需要在 package.json 文件里添加依赖。
//省略部分代码"dependencies": { "element-react": "^1.0.11", "element-theme-default": "^1.3.7", "react": "^15.6.1", "react-dom": "^15.6.1" },
运行命令:
npm install or yarn install
根据 element-react 文档,在 index.js 文件中导入样式
import 'element-theme-default';//省略部分代码
- 现在再重新运行项目,我们可以看到这样的页面:
是的没错,这就是编写一个属于自己的掘金教程。
下篇教程会加入 Redux 进行登录注册操作
项目代码地址:https://github.com/DigAg/digag-pc-react
vue2版项目代码地址:https://github.com/DigAg/digag-pc-vue2
相应后端项目代码地址:https://github.com/DigAg/digag-server
阅读全文
0 0
- React 实践项目 (一)
- React 实践项目 (二)
- React 实践项目 (三)
- React 实践项目 (四)
- React 实践项目 (五)
- React 实践项目 (四)
- React最佳实践(一)
- 游戏项目实践(一)
- react 项目学习笔记一(react-router中的history)
- React Native项目初窥(一)
- React-Native 之 项目实战(一)
- React Native 之 项目实战(一)
- React Native 项目实战(一)
- React-Native 集成到现有项目实践
- 项目实践中的react-navigation导航器
- 项目管理实践入门初探(一)
- python实践项目(一)
- react(一):初识react
- 详解HttpURLConnection(注意末尾的部分)
- 一步一步理解GB、GBDT、xgboost
- Html5--本地文本文件读取与保存
- 11g中高‘Resmgr:Cpu Quantum’等待事件(即使你已经禁用了resource manager)造成数据库hang住的解决办法
- Redis常见的集群方案(转)
- React 实践项目 (一)
- 09/07/2017
- 归并排序算法心得
- POJ 3004 Subway planning 笔记
- Mysql学习历程基本语法(4)--数据操作
- Java8新增的DateTimeFormatter与SimpleDateFormat的区别
- Coprime Sequence HDU
- 机器学习性能评估指标资料汇总
- MySQL对查询结果排序