搭建一个项目

公共部分放一块:index.js style.js store.js reducer.js actionCreateors.js actionTypes.js

分页        一块一块放 拆分在 compentns 里面存放 index.js style.js store.js reducer.js actionCreateors.js actionTypes.js

路由        exact 不会向后取值 不会影响到路由触发

分模块管理

/index

import React,{Component} from 'react';

import {
HomeWapper,
HomeLeft,
HomeRight
} from './style'; import List from './components/List';
import Topic from './components/Topic';
import Recommend from './components/Recommend';
import Writer from './components/Writer'; class Home extends Component{
render(){
return( <HomeWapper>
<HomeLeft>
<img className="banner-img" src="https://upload.jianshu.io/admin_banners/web_images/4592/22f5cfa984d47eaf3def6a48510cc87c157bf293.png?imageMogr2/auto-orient/strip|imageView2/1/w/1250/h/540"/>
<Topic/>
<List/>
</HomeLeft>
<HomeRight>
<Recommend/>
<Writer/>
</HomeRight>
</HomeWapper>
)
}
} export default Home;

/style

import styled from 'styled-components';
import logo from '../../statics/logo.png'; export const HeaderWrapper = styled.div`
position:relative;
width:100%;
height:58px;
border-bottom:1px solid #f0f0f0;
`;

Store(只有一个,reducer有多个)

import {createStore , compose , applyMiddleware } from 'redux';
import reducer from './reducer';
import thunk from 'redux-thunk'; const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(reducer,composeEnhancers( applyMiddleware(thunk) )); export default store;

Reducer(分块创建 ,最后合并为一个)

import { fromJS } from 'immutable';

const defaultState = fromJS({
topic:[
{
id:1,
title:'社会热点',
imgUrl:'https://s.cn.bing.net/th?id=OJ.hCd0aXzY79mTlQ&w=75&h=75&pid=MSNJVFeeds',
},
{
id:2,
title:'新闻联播',
imgUrl:'https://s.cn.bing.net/th?id=OJ.hCd0aXzY79mTlQ&w=75&h=75&pid=MSNJVFeeds',
},
{
id:3,
title:'项目咨询',
imgUrl:'https://s.cn.bing.net/th?id=OJ.hCd0aXzY79mTlQ&w=75&h=75&pid=MSNJVFeeds',
}
]
}); export default (state = defaultState,action)=>{
switch (action.type){
case:
return; default:
return state; } } ;

actionCreateors(创建action状态的文件)

import * as actionTypes from './actionTypes';
import { fromJS } from 'immutable';
import axios from 'axios'; const changeList = (data) => ({
type: actionTypes.CHANGELIST,
data: fromJS(data),
totalpage: Math.ceil(data.length / 10)
}); export const inputFocus = ()=>({
type:actionTypes.INPUTFOCUS
}); export const inputBlur = () =>({
type:actionTypes.INPUTBLUR
}); export const mouseEnter= () =>({
type:actionTypes.MOUSEENTER
}); export const mouseLeave = () =>({
type:actionTypes.MOUSELEAVE
}); export const changePage = (page) =>({
type:actionTypes.CHANGEPAGE,
page
}) // 异步请求数据 获取搜索框里面的数据
export const getList = () =>{
return(dispath) =>{
axios.get('/api/headerList.json').then((res)=>{
const data = res.data;
dispath(changeList(data.listData)); }).catch(()=>{
console.log('err:1','msg:not found 404');
});
}
};

actionTypes(action常量定义文件)

export const INPUTFOCUS = 'header/INPUTFOCUS';
export const INPUTBLUR = 'header/INPUTBLUR';
export const CHANGELIST = 'header/CHANGELIST';
export const MOUSEENTER = 'header/MOUSEENTER';
export const MOUSELEAVE = 'header/MOUSELEAVE';
export const CHANGEPAGE = 'header/CHANGEPAGE';

记得写”命名空间“

connect  连接props数据(

mapStateToProps,
mapDispatchToProps

数据 state

方法路径dispath

const mapStateToProps = (state)=>{
return{ focus:state.getIn(['header','focus']),
list :state.getIn(['header','list']),
page:state.getIn(['header','page']),
show:state.getIn(['header','show']),
totalpage:state.getIn(['header','totalpage'])
}
} const mapDispatchToProps = (dispatch)=>{
return{ handleMouseLeave(){
dispatch(actionCreators.mouseLeave());
}, handleChangePage(page,totalpage,spin){ let rotate = spin.style.transform.replace(/[^0-9]/ig,''); if(rotate){
rotate = parseInt(rotate,10);
}else{
rotate = 0;
} spin.style.transform = 'rotate(' + (rotate + 1000) + 'deg)'; if(page < totalpage){
dispatch(actionCreators.changePage(page + 1));
}else{
dispatch(actionCreators.changePage(1));
} } }
} export default connect(mapStateToProps,mapDispatchToProps)(Header);

React 编写项目连环套路的更多相关文章

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

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

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

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

  3. React 实践项目 (二)

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

  4. react实战项目开发(2) react几个重要概念以及JSX语法

    前言 前面我们已经学习了利用官方脚手架搭建一套可以应用在生产环境下的React开发环境.那么今天这篇文章主要先了解几个react重要的概念,以及讲解本文的重要知识JSX语法 React重要概念 [思想 ...

  5. Expo大作战(三)--针对已经开发过react native项目开发人员有针对性的介绍了expo,expo的局限性,开发时项目选型注意点等

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  6. React 实践项目 (三)

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

  7. React 实践项目 (五)

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

  8. React Native 项目实战-Tamic

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

  9. 如何使用npm构建一个react demo项目

    方法一: 1) 安装node.js环境  点我进入nodejs官网 1.1) 下载LTS(Long term support)版本,安装 1.2) 在cmd中使用以下命令查看node是否安装成功 no ...

随机推荐

  1. 【机器学习PAI实战】—— 玩转人工智能之综述

    摘要: 基于人工智能火热的大背景下,通过阿里云的机器学习平台PAI在真实场景中的应用,详细阐述相关算法及使用方法,力求能够让读者读后能够马上动手利用PAI搭建属于自己的机器学习实用方案,真正利用PAI ...

  2. IO-02. 整数四则运算

    本题要求编写程序,计算2个正整数的和.差.积.商并输出.题目保证输入和输出全部在整型范围内. 输入格式: 输入在一行中给出2个正整数A和B. 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺 ...

  3. JS 寄生 继承

    寄生构造函数 寄生构造函数的用途目的:给String内置对象功能扩充 稳妥的构造函数 继承 对象冒充继承 一般继承 组合继承 原型链继承:借助于中转函数和已有对象 寄生式继承:把原型式+工厂式结合而来 ...

  4. 易位构词EOJ3451【字符串】【思维题】【模拟】

    http://acm.ecnu.edu.cn/problem/3451/ 官方题解: 我们可以先考虑字符串有序的情况,比如是 aaabcc,我们只要将字符串右移 3 位,变成 bccaaa,就做完了. ...

  5. 2019-8-31-dotnet-使用-System.CommandLine-写命令行程序

    title author date CreateTime categories dotnet 使用 System.CommandLine 写命令行程序 lindexi 2019-08-31 16:55 ...

  6. 对The Curse of Dimensionality(维度灾难)的理解

    一个特性:低维(特征少)转向高维的过程中,样本会变的稀疏(可以有两种理解方式:1.样本数目不变,样本彼此之间距离增大.2.样本密度不变,所需的样本数目指数倍增长). 高维度带来的影响: 1.变得可分. ...

  7. UIView 判断是否visible

    if(self.view == [(MyAppDelegate *)[[UIApplication sharedApplication] delegate].window.subviews objec ...

  8. 不撞南墙不回头———深度优先搜索(DFS)Oil Deposits

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  9. sql常用内置函数

    用于测试的表: 一.SUM 返回数值列的总数. 执行查询: select SUM(Score) as 总得分 from Students 效果: 二.MAX 返回一列中的最大值.. 执行查询: sel ...

  10. Python中基于socketserver实现并发的socket

    1.基于TCP协议: 服务端: import socketserver class MyHandler(socketserver.BaseRequestHandler): def handle(sel ...