redux 入门
背景: 在react中使用redux
重点:不要滥用redux,如果你的页面非常简单,没有 那么多的互动,那么就不要使用redux,反而会增加项目的复杂性。
如果你有以下情况,则可以考虑使用redux:
- 某个组件的状态,需要共享
- 某个状态需要在任何地方都可以拿到
- 一个组件需要改变全局状态
- 一个组件需要改变另一个组件的状态
store 一个保存数据的容器,只能有一个store。
redux提供 createStore 可以生成store。
// store/index.js
import { createStore, applyMiddleware, compose } from 'redux'
import logger from 'redux-logger'
import reducers from '../reducers/index'
const middlewares = []
middlewares.push(logger)
const store = createStore( // 将reducer传入,就可以自动调用reducer了
reducers,
compose(
applyMiddleware(...middlewares)
)
)
export default store
action 是一个对象{type: string, data: someData}。
发布一个action,只有store.dispatch()一个方法,联合起来就是这样:
import store from '../store/index'
store.dispatch({
type: 'ADD_TODO',
payload: 'Learn Redux'
});
实际使用例子:
// 把上面创建的store引进了,需要使用store.dispatch
import store from '../store/index' export const CHANGE_DATABASE = 'CHANGE_DATABASE'
export const DATA_BASE = 'DATA_BASE' /**
* 如果有需要异步请求数据的,也可以放在这里, 比如第三个fetchfavoritesTable方法
*/ export const changeDataBase = (data) => {
const dispatch = store.dispatch
dispatch({ type: CHANGE_DATABASE, data: data })
} export const saveDataBase = (data) => {
store.dispatch({ type: DATA_BASE, data: data })
}
export const fetchFavoritesTable = (pageSize, current) => {
const dispatch = store.dispatch
return get(adhocFetchUrl.favorites_get, {
page: current,
pageSize
})
.then((res) => {
if (res.status === 200) {
const result = res.data
const data = []
for (let i = 0, length = result.length; i < length; i++) {
data.push({
key: i,
id: result[i].id,
content: result[i].content,
createTime: result[i].createTime,
name: result[i].name
})
}
const finialData = {
data: data,
total: res.pageCount
}
dispatch({ type: FAVORITES_DATA, data: finialData })
} else {
console.warn('请求搜索历史error:', res)
}
})
}
reducer store收到一个action后,必须给出一个新的state,这样view才会变化,这个计算过程,叫做reducer
reducer是一个函数,接受action和当前state为参数:
const reducer = function (state, action) {
// ...
return new_state;
};
dispatch一个action之后,会自动触发reducer,那么这个前提就是需要在creatStore时候,讲reducer作为参数传入。
拆分reducer:
// 这是其中一个reducer文件: a.js
export default (state = init, actions) => {
const {
type,
data
} = actions
switch (type) {
case CHANGE_DATABASE:
return { ...state, database: data }
case CHANGE_TABLE_ID:
return { ...state, tableId: data }default:
return state
}
}
合并reducer 使用redux提供的combineReducers
import { combineReducers } from 'redux'
import home from './a'
import other from './b'
export default combineReducers({
home,
other
})
这样就可以做到,一个模块对应一个reducer 和一个action文件
目录如下图:

redux 入门的更多相关文章
- Redux 入门到高级教程
Redux 是 JavaScript 状态容器,提供可预测化的状态管理. (如果你需要一个 WordPress 框架,请查看 Redux Framework.) Redux 除了和 React 一起用 ...
- Redux 入门教程
Redux 入门教程(三):React-Redux 的用法(53@2016.09.21) Redux 入门教程(二):中间件与异步操作(32@2016.09.20) Redux 入门教程(一):基本用 ...
- Redux入门
Redux入门 本文转载自:众成翻译 译者:miaoYu 链接:http://www.zcfy.cc/article/4728 原文:https://bumbu.github.io/simple-re ...
- redux入门指南
前言:大概一个月没有写博客了,这两天正好是周末,就写点东西来梳理下之前几个月的所写与所得; 大概两个月前,学习了一下 redux ,还是一点难度的,花了我一天的时间来搞明白他, 但是都没怎么记录,今天 ...
- [转] Redux入门教程(快速上手)
学习前提 在我们开始以前,确保你熟悉以下知识: 函数式JavaScript 面向对象JavaScript JavaScript ES6 语法 同时,确保你的设备已经安装: NodeJS Yarn(或者 ...
- Redux 入门教程(三):React-Redux 的用法
为了方便使用,Redux 的作者封装了一个 React 专用的库 React-Redux,本文主要介绍它. 这个库是可以选用的.实际项目中,你应该权衡一下,是直接使用 Redux,还是使用 React ...
- Redux 入门教程(二):中间件与异步操作
上一篇文章,介绍了 Redux 的基本做法:用户发出 Action,Reducer 函数算出新的 State,View 重新渲染. 但是,一个关键问题没有解决:异步操作怎么办?Action 发出以后, ...
- Redux入门学习
一.Redux三大原则 1. 单一数据源 应用中所有的state都以一个对象树的形式储存在一个单一的store中. 2. state只读 唯一改变state的办法是触发action.action是一个 ...
- Redux 入门教程(一):基本用法
转自http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_one_basic_usages.html(仅供个人学习使用) 首先明确一点, ...
随机推荐
- 【CSS/JS】如何实现单行/多行文本溢出的省略(...)--老司机绕过坑道的正确姿势
写前端UI的朋友们也许都遇到过这样的问题:我们需要实现这样一个需求,在一个父级元素中隐藏一个可能过长的文本: 这个文本可能是单行的: 也可能是多行的: 下面我就给大家展示如何简单或优雅地实 ...
- 「ZJOI2019」&「十二省联考 2019」题解索引
「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 20 ...
- eclipse运行spark程序时日志颜色为黑色的解决办法
自从开始学习spark计算框架以来,我们老师教的是local模式下用eclipse运行spark程序,然后我在运行spark程序时,发现控制台的日志颜色总是显示为黑色,哇,作为程序猿总有一种强迫症,发 ...
- PHP判断访问系统的用户设备类型
当今的电子设备越来越多,我们在开发过程中往往也需要分析用户使用的电子设备类型.下面是采用PHP代码来获取用户使用的哪些类型的电子设备来访问自己的平台. /** * 用户设备类型 * @return s ...
- PHP实现大文件下载
实现大文件下载的关键在于循环读取字节流 function downloadFile($filename) { //获取文件的扩展名 $allowDownExt = array ( 'rar', 'zi ...
- ubuntu下makeinfo安装,其实真正安装的是texinfo包
操作系统环境:ubuntu 在终端中执行命令:sudo apt-get install texinfo 今天在打包的时候有个包需要 makeinfo,当时就各种搜结果就没有 makeinfo 这个 ...
- knn算法的c语言实现
最近研究KNN,找到了一些优秀的源码,贴出来,做个笔记吧. #include<stdio.h> #include<stdlib.h> #include<math.h> ...
- NIO/BIO
NIO/BIO BIO网络通信 概述 网络编程的基本模型是Client/Server模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地 ...
- 人生苦短,我用Python(1)
一.人生苦短,我用Python 在文章的开头给大家介绍一下Python语言,作者Guido von Rossum.对,就是图中的“人生苦短我用Python”那哥们.你可能以为我会用很多文字介绍Pyth ...
- 去掉word页眉上横线的技巧
页眉下面会出现一条横线 双击页眉进入页眉页脚编辑状态.选定页眉内容.点击菜单栏[开始]-[清除一切格式]图标. 效果图: 方法二 进入页眉编辑状态,同时自动切换到了“设计”选项卡.同时注意观察,在页眉 ...