1. src 下的 common 下的 header 创建 store 文件夹 下创建 reducer.js

# src/common/header/store/reducer.js

const stateDefault = {

focused : false

};

export default (state = stateDefault, action)=>{

if(action.type === 'focus' || action.type === 'blur'){

const newState = JSON.parse(JSON.stringify(state));

newState.focused = action.focused;

return newState;

}

return state;

}

2. 添加 redux-devtools-extension 拓展 并 创建 src/store/index.js 对 redux 数据进行监听

(未装 redux 拓展 , 使用 yarn add redux 进行安装)

yarn add redux-devtools-extension

# src/store/index.js

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

3. 创建 src/store/reduct.js 使用 redux 的  对 header 的 reducer 数据进行管理

# src/store/reduct.js

import { combineReducers } from 'redux';

import headerReducer from '../common/header/store';

export default combineReducers({

header : headerReducer

});

4. 修改 src/App.js 使 app 下的全部组件支持 store 数据存取

(未装 redux 拓展 , 使用 yarn add react-redux 进行安装)

#src/App.js

import React from 'react';

import Header from './common/header';

import store from './store';

import {Provider} from 'react-redux';

function App() {

return (

<div>

<Provider store={store}>

<Header />

</Provider>

</div>

);

}

export default App;

5. 修改 src/common/header/index.js 组件的引入路径

#src/common/header/index.js


import React from 'react';

import {CSSTransition} from 'react-transition-group';

import {connect} from 'react-redux';

import {

HeaderWrapper,

Logo,

Nav,

NavItem,

SearchWrapper,

NavSearch,

Addtion,

Button

} from './style';

const Header = (props)=>{

return (

<HeaderWrapper>

<Logo />

<Nav>

<NavItem className="left active">首页</NavItem>

<NavItem className="left">下载</NavItem>

<NavItem className="right">登陆</NavItem>

<NavItem className="right">

<span className="iconfont">&#xe601;</span>

</NavItem>

<SearchWrapper>

<CSSTransition

in={props.focused}

timeout={200}

classNames='slide'

>

<NavSearch

className={props.focused? 'focused' : ''}

onFocus={props.searchFocus}

onBlur={props.searchBlur}

></NavSearch>

</CSSTransition>

<span className={props.focused? 'focused iconfont' : 'iconfont'}>&#xe60b;</span>

</SearchWrapper>

</Nav>

<Addtion>

<Button className='writting'>

<span className="iconfont">&#xe703;</span>

写文章

</Button>

<Button className='reg'>注册</Button>

</Addtion>

</HeaderWrapper>

);

}

const PropsToState = (state)=>{

return {

focused : state.header.focused

}

}

const PropsToDispatch = (dispatch)=>{

return {

searchFocus(){

const action = {

type : 'focus',

focused : true

}

dispatch(action);

},

searchBlur(){

const action = {

type : 'blur',

focused : false

}

dispatch(action);

}

}

}

export default connect(PropsToState, PropsToDispatch)(Header);

4 react 简书 引入 redux 的 combineReducers 对 redux 数据进行管理的更多相关文章

  1. react 简书开发笔记

    详见文章<React简书开发实战课程笔记>

  2. React 简书

    create-react-app   jianshu yarn add styled-components -D       利用js写css样式  样式会更高效 https://github.com ...

  3. react简书

    开发项目之前的准备 https://www.chromefor.com/  登录此网站 下载相关crx react插件 不然要FQ 下载 React Developer Tools 谷歌插件下载 Re ...

  4. react简书笔记一 环境, git 和 项目 关联

    1.. 建立git项目  ( 码云, github 都可以 ), 具体步骤: https://www.cnblogs.com/andy-lehhaxm/p/10720717.html 1.1  git ...

  5. 2. react 简书 头部(header) 图标添加

    1. 访问 iconfont 并注册 登陆 2. 进入 iconfont 头部 图标管理->我的项目 3. 点击右边的文件夹 + 号 图标 创建我的项目 输入项目名称即可 4.在 搜索框 搜索 ...

  6. 3 react 简书 添加 头部搜索动态效果

    1. 添加动态效果组件 yarn add react-transition-group 2. 修改 src/common/header/index.js import React, {Componen ...

  7. 2. react 简书 头部 (header) 样式编写

    1. 在 src 下 创建 common 文件下 创建 header 文件夹下 创建 index.js #src/common/header/index.js import React, {Compo ...

  8. 1. react 简书 项目初始化

    1. 创建 react 项目 npx create-react-app my-app 2. src 目录下删除 除了 index.js index.css app.js 的文件 3. 引入 style ...

  9. react项目中引入了redux后js控制路由跳转方案

    如果你的项目中并没有用到redux,那本文你可以忽略 问题引入 纯粹的单页面react应用中,通过this.props.history.push('/list')就可以进行路由跳转,但是加上了redu ...

随机推荐

  1. NoSQL技术

    NoSQL技术使用场景: 在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢 ...

  2. 二十四 Redis消息订阅&事务&持久化

    Redis数据类型: Redis控制5种数据类型:String,list,hash,set,sorted-set 添加数据,删除数据,获取数据,查看有多少个元素,判断元素是否存在 key通用操作 JR ...

  3. js 对象补充

    js 对象 普通对象与对象简写 js 没有字典类型,只有对象类型,对象可以完全替代字典来使用 js 中对象的属性名,都采用字符串类型,所以就可以省略字符串的引号标识 对象中属性值为函数时,称之为方法, ...

  4. 学习Linux让我进入了知名企业

    说起我学习Linux的原因是多方面的,大学时我学的是物理学师范专业,有部分计算机课程,但我觉得这些课程没什么实际作用,我自己对计算机比较感兴趣,我利用业余时间学习了很多计算机技术.在大学期间我参加了很 ...

  5. vue打包部署(含2.0)

    到这里vue的所有平时使用的知识点都写完了 先补充一下vue2.x的安装 ## 全局脚手架 npm install vue/cli -g ## 查看版本 vue --version ## 新建项目 v ...

  6. HDU - 6130 Kolakoski (打表)

    题意:由1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,……合并可得1,22,11,2,1,22,1,22,11,2,11,22,1,再由每个数的位数可得新序列,推出新 ...

  7. 51nod:天堂里的游戏

    天堂里的游戏 李陶冶 (命题人) System Message (测试) 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 多年后,每当Noder看到吉普赛人,就会想起那个遥远的下午. ...

  8. 【转】R函数-diag()函数

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lili_wuwu/article/det ...

  9. 云时代架构阅读笔记六——Java内存模型详解(二)

    承接上文:云时代架构阅读笔记五——Java内存模型详解(一) 原子性.可见性.有序性 Java内存模型围绕着并发过程中如何处理原子性.可见性和有序性这三个特征来建立的,来逐个看一下: 1.原子性(At ...

  10. namenode节点无法自动切换主从

    当停掉主namenode节点,从节点无法切换到active状态,有两种可能导致这种问题 1.查看namenode上的zkfc日志,发现没有fuser命令,需要手动安装 yum install -y p ...