redux

1.  先跑一个demo

    脚手架搭建:

    sudo npm install -g create-react-app cnpm --registry=https://registry.npm.taobao.org

    新建redux工程:

    create-react-app redux-shopping-cart

    生成redux脚手架:

    sudo npm install -g redux cnpm --registry=https://registry.npm.taobao.org

2. 组件解析

    redux本质上是状态管理,管理谁的状态,当然是管理对象的状态,每个对象都有初始的状态、以及对应的方法。所以redux的定义中包含了对象都有初始的状态、以及对应的方法。

const initialState = {
  cart: [
    {
      product: 'bread 700g',
      quantity: 2,
      unitCost: 90
    },
    {
      product: 'milk 500ml',
      quantity: 1,
      unitCost: 47
    }
  ]
}

export default function(state=initialState, action) {
  // state 是对象的状态,action为对象的操作。
  switch (action.type) {
    case ADD_TO_CART: {
      return {
        ...state,
        cart: [...state.cart, action.payload]
      }
    }

    default:
      return state;  // 返回reducer对象
  }
}

那action函数的定义就必须包含两部分,操作的类型和对应的参数,如:

export const ADD_TO_CART = 'ADD_TO_CART';
export function addToCart(product, quantity, unitCost) {
  return {
    type: ADD_TO_CART,
    payload: { product, quantity, unitCost }  //传递的参数
  }
}

当redux和action定义好之后,必须有个入口来管理,这个入口就是个容器(store),通过redux的createStore来定义,createStore接受一个参数。该参数是reducer对象或者是数组对象(reducers)。

import { createStore } from "redux";

const reducer = function(state, action) {
  return state;
}

const store = createStore(reducer);  // 只管理一个reducer
/************/
import cartReducer from './cart-reducer';
import productsReducer from './products-reducer';
const allReducers = {
  products: productsReducer,
  shoppingCart: cartReducer
}

const rootReducer = combineReducers(allReducers);
let store = createStore(rootReducer);   //管理多个

最后,要实现mvc的效果,必须对store进行响应式处理,就需要对store对象进行订阅,下面代码就是redux的入口程序:

// 每个应用程序只有一个store对象。
let unsubscribe = store.subscribe(() =>
  console.log(store.getState())
);
unsubscribe(); 

如果要对管理的对象进行操作,用到store.dispatch方法,他接受一个action对象。

store.dispatch(addToCart('Flour 1kg', 2, 110));

3. 目录分配

 

 

actions: 定义每个reducers的数据操作函数。

reduces:  定义reducers,包含对管理对象的初始状态、数据操作;index.js是把所以的reduces对象集中管理、

store.js: 定义应用的store对象

index.js:   应用的入口函数。 

4. 结合react

安装react-redux: npm install react-redux

import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
const App = <h1>Redux Shopping Cart</h1>;

ReactDOM.render(
  <Provider store={store}>  // react-redux类把reactDom应用程序包含到redux中去,现在还不懂
    { App }
  </Provider> ,
  document.getElementById('root')
);

5. 参考文献:

https://segmentfault.com/a/1190000011474522?utm_source=tag-newest#articleHeader3

   

转载于:https://www.cnblogs.com/liuyinlei/p/11468976.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值