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(仅供个人学习使用) 首先明确一点, ...
随机推荐
- 微信小程序合法域名配置-不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书
微信小程序合法域名配置-不校验合法域名.web-view(业务域名).TLS 版本以及 HTTPS 证书 很多教程说按照以上方式调用即可.但是当我们在程序中实际调用以上程序时,就会报错, http:/ ...
- lua模块demo(redis,http,mysql,cjson,本地缓存)
1. lua模块demo(redis,http,mysql,cjson,本地缓存) 1.1. 配置 在nginx.conf中设置lua_shared_dict my_cache 128m; 开启ngi ...
- JavaScript深入(操作BOM对象)
浏览器对象模型(BOM) BOM的核心是window, 向下有: document(文档):document下由button,text,from,等等表单元素组成. location(地址对象),hi ...
- 在linux系统上文件传输的小技巧
各位做运维的小伙伴,你是不是常常在为文件传到linux服务器上感到头疼呢,我们知道常用的文件传输工具有好多,比如xftp,winscp等,但是有没有比这更简单的呢?当然是有的呢,下面给大家介绍下: y ...
- 根据sockfd获取TCP连接本地地址以及对端地址
摘抄自muduo代码实现. 获取本地地址(LocalAddr): struct sockaddr_in6 sockets::getLocalAddr(int sockfd) { struct sock ...
- Redis 如何分析慢查询操作?
什么是慢查询 和mysql的慢SQL日志分析一样,redis也有类似的功能,来帮助定位一些慢查询操作. Redis slowlog是Redis用来记录查询执行时间的日志系统. 查询执行时间指的是不包括 ...
- .NET Core SDK在Windows系统安装后出现Failed to load the hostfxr.dll等问题的解决方法
这次无论如何也要记录下,原因是今天在一台Windows2008R2的电脑上安装.NET Core SDK后再命令行执行dotnet --info 居然爆出了"Failed to load t ...
- 【jQuery】(3)---Jquery操作Dom
1 内部插入节点 <body> <ul id="city"> <li id="bj" name=&qu ...
- RabbitMQ配置
RabbitMQ Configuration RabbitMQ提供多种配置方式:配置文件.环境变量.运行时参数等等. 默认配置文件的位置在/etc/rabbitmq/ Config File Loca ...
- 使用 IdentityServer4 实现 OAuth 2.0 与 OpenID Connect 服务
IdentityServer4 是 ASP.NET Core 的一个包含 OIDC 和 OAuth 2.0 协议的框架.最近的关注点在 ABP 上,默认 ABP 也集成 IdentityServer4 ...