搭建一个项目

公共部分放一块: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. pygame-常用的方法

    1.pygame常用的方法 2.语音 图片

  2. uml设计之多重性

    ---------------------------------------------------------------------------------------------------- ...

  3. 2019.10.24TCP协程处理

    server from gevent import monkey,spawn monkey.patch_all() import socket server = socket.socket() ser ...

  4. PHPCMS快速建站系列之 pc标签where中如何使用变量

    {pc:content action="lists" catid="$catid" where="typeid='$t'" order=&q ...

  5. celery 动态定时任务探索

    环境: celery 4.3 flask python 3.7 linux 需求: 动态添加定时任务,且方便维护. 解决思路: 参考django-celery 或是celery源码,将定时任务配置放置 ...

  6. KiCad 5.1.3 尝鲜版已经有了

    KiCad 5.1.3 尝鲜版已经有了 发现一个改动. 对调了对话框按钮的位置,和 Windows 习惯一样了.

  7. js全局方法

    1.eval() 参数:string要计算的表达式或要执行的语句 返回值:计算结果或者执行结果 使用方法: (1)eval("2+2")返回值:4 (2)eval("x= ...

  8. kubernetes1.3:操作Docker

    Kubernetes对Docker的管理是通过一个第三方组件实现的.在Kubernetes1.2中这个第三方组件就是go-dockerclient,这是一个GO语言写的docker客户端,支持Dock ...

  9. python if elif else 区别

    if data_ori=='医疗': # 医疗 df = pd.read_excel(path_apply + 'apply/YS_ZY_HZSQ_样例.xls', encoding='gbk', e ...

  10. jmeter日期处理beanshell(2)

    import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.text.P ...