React在Github上已经有接近70000的 star 数了,是目前最热门的前端框架。而我学习React也有一段时间了,现在就开始用 React+Redux 进行实战!

项目代码地址:https://github.com/DigAg/digag-pc-react

  • 首先,我们开始构建一个基础项目。

我们使用create-react-app创建项目,不需要安装或配置W​​ebpack或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

React 实践项目 (一)的更多相关文章

  1. React 实践项目 (二)

    React在Github上已经有接近70000的 star 数了,是目前最热门的前端框架.而我学习React也有一段时间了,现在就开始用 React+Redux 进行实战! React 实践项目 (一 ...

  2. React 实践项目 (三)

    React在Github上已经有接近70000的 star 数了,是目前最热门的前端框架.而我学习React也有一段时间了,现在就开始用 React+Redux 进行实战! 上回说到使用Redux进行 ...

  3. React 实践项目 (五)

    React在Github上已经有接近70000的 star 数了,是目前最热门的前端框架.而我学习React也有一段时间了,现在就开始用 React+Redux 进行实战! React 实践项目 (一 ...

  4. Immutable.js 以及在 react+redux 项目中的实践

    来自一位美团大牛的分享,相信可以帮助到你. 原文链接:https://juejin.im/post/5948985ea0bb9f006bed7472?utm_source=tuicool&ut ...

  5. 在React旧项目中安装并使用TypeScript的实践

    前言 本篇文章默认您大概了解什么是TypeScript,主要讲解如何在React旧项目中安装并使用TypeScript. 写这个的目的主要是网上关于TypeScript这块的讲解虽然很多,但都是一些语 ...

  6. 技术实践丨React Native 项目 Web 端同构

    摘要:尽管 React Native 已经进入开源的第 6 个年头,距离发布 1.0 版本依旧是遥遥无期."Learn once, write anywhere",完全不影响 Re ...

  7. 【腾讯Bugly干货分享】React Native项目实战总结

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 “8小时内拼工作,8小时外拼成长 ...

  8. React Native 项目实战-Tamic

    layout: post title: React Native 项目实战 date: 2016-10-18 15:02:29 +0800 comments: true categories: Rea ...

  9. React Native 项目运行在 Web 浏览器上面

    React Native 的出现,让前端工程师拥有了使用 JavaScript 编写原生 APP 的能力.相比之前的 Web app 来说,对于性能和用户体验提升了非常多. 但是 React Nati ...

随机推荐

  1. 无锁atomicInteger

    AtomicInteger可以保证硬件上的原子操作 1.主要原理 CAS操作 在进行数据更新的时候,会进行与内存中的地址进行比较,若预期值与内存中的值相同,则进行数据上的更新,若值不同,则更新失败,  ...

  2. .net后台获取DataTable数据,转换成json数组后传递到前台,通过jquery去操作json数据

    一,后台获取json数据 protected void Page_Load(object sender, EventArgs e){  DataTable dt = DBhepler.GetDataT ...

  3. 每R一点:层次聚类分析实例实战-dist、hclust、heatmap等(转)

    聚类分析:对样品或指标进行分类的一种分析方法,依据样本和指标已知特性进行分类.本节主要介绍层次聚类分析,一共包括3个部分,每个部分包括一个具体实战例子. 1.常规聚类过程: 一.首先用dist()函数 ...

  4. SignalR来做实时Web聊天

    本章和大家分享的内容是使用Signal R框架创建个简易的群聊功能,主要讲解如何在.Net的MVC中使用这个框架,由于这个项目有官方文档(当然全英文),后面也不打算写分享篇了,主要目的是让朋友们在需要 ...

  5. python小工具:用python操作HP的Quality Center (二)----- 用异步方式提高速度

    上接第一篇 http://www.cnblogs.com/sdet/p/6874631.html 在python中,很简单地能把http请求通过异步的方式发送,以下代码在python 3.6.0上运行 ...

  6. hdu5950

    hdu5950 题意 \(给出 f_1 , f_2 ,以及递推式 f_n = 2 * f_{n-2} + f_{n-1} + n^4 ,求 f_n (mod=2147493647)\) 推导一下. \ ...

  7. day_ha配置文件

    流程图: 代码 #!/sur/bin/env python # -*- coding: utf-8 -*- #{"backend": "www.oldboy.org&qu ...

  8. JavaScript 扫描枪使用(一)

    JavaScript 扫描枪应用(一)com.js为主要的代码实现,test.html文件为测试的页面,其中包括了com.js文件中方法的调用.以下为测试成功代码:com.js //com.js /* ...

  9. 初识Java(2) 变量与数据类型

    一. 变量 1.变量是内存中的一个标识符号,用于存储数据 2.变量命名规则 1)  必须以字母.下划线 _ .美元符号 $ 开头 2) 变量中,可以包括数字 3) 变量中,不能出现特殊的符号,空格 4 ...

  10. python os模块学习

    一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的. 二.常用方法 1.os.name 输出字符串指示正在使用的平台.如果是wi ...