千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:重庆千锋IT培训  >  技术干货  >  redux-thunk是干什么的?如何使用redux-thunk?

redux-thunk是干什么的?如何使用redux-thunk?

来源:千锋教育
发布人:lxl
时间: 2023-04-11 14:33:00

redux-thunk

  什么是thunk?

  thunk可以理解为函数的另一种称呼,但不是以前我们说的简单函数。Thunk代表的是一个被其他函数返回的函数。

  那么它是怎么作用在redux上的呢?

  Redux中有几个概念:”actions”,”action creators”,”reducer”,“middleware”

  Actions就是普通对象,并且一定有一个type属性,除了这个,你可以在对象中自定义你想要描述该action的数据。

  // 1. plain object

  // 2. has a type

  // 3. whatever else you want

  {

  type: "USER_LOGGED_IN",

  username: "dave"

  }

  每次都要手写action对象会很麻烦,redux有一个“action creators”的概念来简化。

  function userLoggedIn() {

  return {

  type: 'USER_LOGGED_IN',

  username: 'dave'

  };

  }

  你可以通过调用userLoggedIn函数来生成这个action,如果你在app中多次dispatch同样的action,使用action creators会大大简化工作。

  Action可以做点什么吗?

  Action虽然叫action,但其实什么都不做,只是对象而已。它们可以自己做点什么吗?比如像调用api或是触发其他actions?

  因为reducer必须是纯函数,我们不能在reducer里调用api或是触发其他actions。

  如果我们希望action做些什么,就要把代码放进一个函数中去,这个函数就是thunk。

  Action creators返回一个函数而不是一个action对象。

  function getUser() {

  return function() {

  return axios.get('/current_user');

  };

  }

  那么怎么让Redux处理actions是函数的情况呢?

  我们就引入了redux-thunk,它是一个中间件,每次action都会经历它,如果action是一个函数,就调用这个函数,这就是redux-thunk做的事。

  传递给thunk函数的就是两个参数:

  Dispatch,如果它们需要,可以dispatch新的action。

  getState,它们可以获取最新的state。

  function logOutUser() {

  return function(dispatch, getState) {

  return axios.post('/logout').then(function() {

  // pretend we declared an action creator

  // called 'userLoggedOut', and now we can dispatch it

  dispatch(userLoggedOut());

  });

  };

  }

  如何使用redux-thunk

  安装redux-thunk包

  npm install --save redux-thunk

  导入redux-thunk并插入redux

  import { createStore, applyMiddleware } from 'redux';

  import thunk from 'redux-thunk';

  import rootReducer from './reducers/index';

  const store = createStore(

  rootReducer,

  applyMiddleware(thunk)

  );

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

java的输入语句—— Scanner类

2023-05-04

java数据库操作常识事务的四大特性

2023-05-04

DML数据操作之增加或删除数据

2023-05-04

最新文章NEW

socket是什么?有什么作用?

2023-05-04

Java常量定义是什么

2023-04-28

一分钟带你学多线程

2023-04-28

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>