4 react 简书 引入 redux 的 combineReducers 对 redux 数据进行管理

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"></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‘}></span>

</SearchWrapper>

</Nav>

<Addtion>

<Button className=‘writting‘>

<span className="iconfont"></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);

原文地址:https://www.cnblogs.com/zonehoo/p/11984811.html

时间: 2024-11-01 00:15:17

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

iOS实现简书的账号识别方式(正则表达式)

通过简书iOS客户端登录,我们会看到请输入手机号或者邮箱登录,但是我们随机输入1234567的时候,便会弹出手机格式不正确,同样也会识别我们的邮箱格式,那么我们在项目中怎么实现这种判断呢? 0E471361-060C-4D93-913F-73622F89BC60.png 这就是我们今天要说的正则表达式. 正则表达式的介绍 正则表达式有多种使用方法,根据我们的需要,我们是要判断输入是否合法,还是查找指定的内容,还是捕获多个输入的内容,可以选用不同的方法,今天我们主要说一下,判断输入是否合法,用谓词

简书markdown教程

1 支持 Markdown 的编辑器 Windows 推荐 Sublime Text 3,强大优雅的编辑器.MarkdownPad,一款可以直接预览排版效果的编辑器. Mac 推荐 Ulysess,专注写作的编辑器,功能强大,体验一流.Macdown,可以预览排版效果. Linux 推荐 VIM,编辑器之神.当然,Emacs是神的编辑器.ReText,也可以预览. Web 推荐简书,有 Markdown 写作/预览模式.作业部落,功能强大的 Markdown 编辑器.与其他常用工具配合在 Fir

React16.4 开发简书项目 从零基础入门到实战

第1章 课程导学本章主要介绍学习react的重要性,课程的知识大纲,学习前提,讲授方式及预期收获.1-1 课程导学 第2章 React初探本章主要讲解React项目的开发环境搭建,工程代码结构及React中最基础的语法内容,同时对前端组件化思想进行介绍.2-1 React简介2-2 React开发环境准备2-3 工程目录文件简介2-4 react中的组件2-5 React 中最基础的JSX语法 第3章 React基础精讲本章通过TodoList功能的实现,给大家完整介绍React的基础语法,设计

个人技术博客的选择:CSDN、博客园、简书、知乎专栏还是Github Page?(转)

个人技术博客的选择:CSDN.博客园.简书.知乎专栏还是Github Page? 有很多技术人员在学习到一定程度后发现了写博客的重要性,一方面帮助自己记忆,一方面也能帮助他人解决问题,于是会选择自己开始写博客,之后又发现平台太多不知从何下手,在这里我根据自己写博客的经验比较一下各个平台的优缺点. 这里主要对比CSDN.博客园.简书.知乎专栏.Github Page.个人建站和其他 CSDN 笔者是CSDN的长期用户,也见到了很多不错的CSDN博客 优点 SEO做得好,无论是百度还是google(

【凯子哥带你学Android】Andriod性能优化之列表卡顿——以“简书”APP为例

这几天闲得无聊,就打开手机上的开发者模式里面的"GPU过度绘制"功能,看看别家的App做的咋样,然后很偶然的打开了"简书",然后就被它的过度绘制惊呆了,于是写了这篇性能分析的文章,从一个只有APK文件的角度,说下如何寻找布局中可能存在的性能问题,以及解决方案.本文章以简书Android最新版本1.9.1进行分析. GPU过度绘制 Hierarchy View SysTrace TraceView 总结 分析资源下载 GPU过度绘制 首先打开下面两个功能开关 开发者模

《信息安全技术》简书破密

wireshark网络捕获 今天的作业是用wireshark软件捕获网络 我就用它捕获了我登的简书登录账号跟密码,密码是假的,但账号跟错误的密码都捕获成功了. 首先打开软件,点开所用的网络类型,我的是WALN 然后打开网址登录网页,登陆账号 接下来找,因为我登的是http协议,所以可以在应用显示过滤器中输入hhttp.request.method==POET来节省时间 找到了,账号 错误的密码都捕获到了 真的好神奇!越来越对这些课感兴趣了.

如何用css实现类似简书的纵向导航/竖排导航

作为一个专注阅读的网站,它的导航也一定是全局的,固定的,也是简洁的.事实上几家阅读网站豆瓣阅读,多看,简书都是这样做的,刚好实现起来也不算复杂,以下是我想到的实现方法. 首先是html的结构: 1 <body> 2 <nav> 3 <div> 4 <a href="#">点</a> 5 <a href="#">滴</a> 6 <a href="#">一

简书-markdown

标题 这是最为常用的格式,在平时常用的的文本编辑器中大多是这样实现的:输入文本.选中文本.设置标题格式. 如: # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 注:# 和「一级标题」之间建议保留一个字符的空格,这是最标准的 Markdown 写法. 你可以你的编辑器中尝试输入这六级标题,可以参考下方的截图: 一级标题至六级标题 列表 Markdown 中,只需要在文字前面加上 - 如: - 文本1 - 文本2 - 文本3 有序排列

转载:简书 vim环境配置 作者 fromradio 留作备忘 如侵权请联系删除

为Python创建Vim环境 作者 fromradio 2016.08.04 11:36* 字数 1766 阅读 504评论 0喜欢 12 大部分Python使用者可能习惯使用Sublime Text 3等笔记本式的编辑器.然而实际工作环境中有可能遇到需要在无GUI环境下工作的情况,比如需要登录到虚机上进行调试等.此时vim成为了常用的编辑器选择,所以如何使得vim变得心应手成为一个重要的问题. 第一个问题是vim版本的问题,笔者工作环境中的red hat 6版本的默认vim为7.2,不能支持后