前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

redux

作者头像
_kyle
发布2020-08-24 12:04:40
8310
发布2020-08-24 12:04:40
举报
文章被收录于专栏:kyle的专栏kyle的专栏

一、什么是redux

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。可以让你构建一致化的应用,运行于不同的环境(客户端、服务器、原生应用),并且易于测试。Redux 除了和 React 一起用外,还支持其它界面库。 它体小精悍(只有2kB,包括依赖)。

二、学习网址:

http://www.redux.org.cn/ 中文网址 http://redux.js.org/ 英文网址

三、安装与引入

npm install --save redux 安装 import { createStore } from 'redux';引入

四、redux三大原则

单一数据源、state是只读的,使用纯函数来执行修改

五、使用redux

当安装好redux包并引入以后,我们通过creteStore(reducer)创建一个store状态机,用于状态管理。reducer是一个纯函数【纯函数即返回值只有传入的参数决定】,reducer(state,action)有2个参数,state为当前的状态,action 就是一个描述“发生了什么”的普通对象,reducer中通过switch流程控制语句判断action.type的值,来更改state。通过使用store.dispatch(action)来触发aciton的改变,然后通过store.subscribe(()=>{}),来手动订阅更新,当store.dispatch(action)后,就会触发store.subscribe。通过使用store.getState()获取当前store中state状态

代码语言:javascript
复制
import{ render } from 'react-dom';
import { createStore } from 'redux';

/**
 * 这是一个 reducer,形式为 (state, action) => state 的纯函数。
 * 描述了 action 如何把 state 转变成下一个 state。
 *
 * state 的形式取决于你,可以是基本类型、数组、对象、
 * 甚至是 Immutable.js 生成的数据结构。惟一的要点是
 * 当 state 变化时需要返回全新的对象,而不是修改传入的参数。
 *
 * 下面例子使用 `switch` 语句和字符串来做判断,但你可以写帮助类(helper)
 * 根据不同的约定(如方法映射)来判断,只要适用你的项目即可。
 */
function counter(state = 0, action) {
  switch (action.type) {
  case 'INCREMENT':
    return state + 1;
  case 'DECREMENT':
    return state - 1;
  default:
    return state;
  }
}

// 创建 Redux store 来存放应用的状态。
// API 是 { subscribe, dispatch, getState }。
let store = createStore(counter);

// 可以手动订阅更新,也可以事件绑定到视图层。
store.subscribe(() =>
  console.log(store.getState())
);

// 改变内部 state 惟一方法是 dispatch 一个 action。
// action 可以被序列化,用日记记录和储存下来,后期还可以以回放的方式执行
store.dispatch({ type: 'INCREMENT' });
// 1
store.dispatch({ type: 'INCREMENT' });
// 2
store.dispatch({ type: 'DECREMENT' });
// 1

render(
 //这里我们通过将store传入组件,后续我们即可以通过this.props.store来调用store
  <Counter store={store} />,
  document.querySelector('#root')
)

六、redux中的一些处理

  1. action有可能需要多次调用,为了避免书写麻烦,我们用一个方法来创建并返回一个action,action必须是一个对象,这个方法官方的叫法是actionCreator。 在redux里要更改数据,必须通过reducer来更改,触发reducer的惟一方式是dispatch一个action, 只要dispatch了action,所对应的reducer就会执行,reducer执行之后,state就发生了改变
代码语言:javascript
复制
const add = (num = 1) => {
  return {
    type: 'ADD',
    num
  }
}
const reduce = (num = 1) => {
  return {
    type: 'REDUCE',
    num
  }
}
store.dispatch(add(5))
store.dispatch(reduce(2))

在处理action:type时,如果type值我们写错了,redux也不会报错,他会执行default默认值,这时我们就很尴尬了,所以我们常用的办法时,在action文件夹里创建一个actionType文件,将所有action里要用到的type值,用变量存起来,变量值为字符串即下面的做法,后面我们将type类型用变量引入,加入不存在这个变量的话,就会出现undefined报错

代码语言:javascript
复制
// 定义action的类型

export const ADD = 'ADD';
export const REDUCE = 'REDUCE';

export const START_GET_DATA = 'START_GET_DATA';
export const GET_DATA_SUCCESS = 'GET_DATA_SUCCESS';
代码语言:javascript
复制
// 导入actionType
import {
  ADD,
  REDUCE,
  START_GET_DATA,
  GET_DATA_SUCCESS
} from './actionType';

// ·加· 这个动作的action creator,
export const add = (num = 1) => {
  return {
    type: ADD,
    num
  }
}
  1. 一个store里面不只一个reducer,可能有很多个reducer,这时我们可以把reducer提到一个文件夹单独编写,将每一个reducer的名字取为文件名,然后暴露出去,在从index.js文件里使用redux中combineReducers将所有reducer暴露出去

reducers

代码语言:javascript
复制
import {
  combineReducers
} from 'redux';

import cart from './cart';
// combineReducers 是redux提供的一个方法,用于合并多个reducer
export default combineReducers({
  cart
})

combineReducers使用示例

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是redux
  • 二、学习网址:
  • 三、安装与引入
  • 四、redux三大原则
  • 五、使用redux
  • 六、redux中的一些处理
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档