如何在redux-thunk中使用axios / AJAX

在行动中使用axios我需要知道这是否是正确的方法。

actions/index.js ==>

import axios from 'axios';
import types from './actionTypes'
const APY_KEY = '2925805fa0bcb3f3df21bb0451f0358f';
const API_URL = `http://api.openweathermap.org/data/2.5/forecast?appid=${APY_KEY}`;

export function FetchWeather(city) {
  let url = `${API_URL}&q=${city},in`;
  let promise = axios.get(url);

  return {
    type: types.FETCH_WEATHER,
    payload: promise
  };
}

reducer_weather.js ==>

import actionTypes from '../actions/actionTypes'
export default function ReducerWeather (state = null, action = null) {
  console.log('ReducerWeather ', action, new Date(Date.now()));

  switch (action.type) {
    case actionTypes.FETCH_WEATHER:
          return action.payload;
  }

  return state;
}

然后将它们合并到rootReducer.js ==>

import { combineReducers } from 'redux';
import reducerWeather from './reducers/reducer_weather';

export default combineReducers({
  reducerWeather
});

最后在我的React容器中调用一些js文件...

import React, {Component} from 'react';
import {connect} from 'react-redux';
import {bindActionCreators} from 'redux';
import {FetchWeather} from '../redux/actions';

class SearchBar extends Component {
  ...
  return (
    <div>
      ...
    </div>
  );
}
function mapDispatchToProps(dispatch) {
  //Whenever FetchWeather is called the result will be passed
  //to all reducers
  return bindActionCreators({fetchWeather: FetchWeather}, dispatch);
}

export default connect(null, mapDispatchToProps)(SearchBar);
镰刀菌属

我猜你不应该(或者至少不应该)直接在商店里兑现承诺:

export function FetchWeather(city) {
  let url = `${API_URL}&q=${city},in`;
  let promise = axios.get(url);

  return {
    type: types.FETCH_WEATHER,
    payload: promise
  };
}

这样,您甚至都没有使用redux-thunk,因为它返回的是普通对象。实际上,redux-thunk可让您返回一个函数,稍后将对其进行评估,例如,如下所示:

export function FetchWeather(city) {
  let url = `${API_URL}&q=${city},in`;
  return function (dispatch) { 
    axios.get(url)
      .then((response) => dispatch({
        type: types.FETCH_WEATHER_SUCCESS,
        data: response.data
      })).catch((response) => dispatch({
        type: types.FETCH_WEATHER_FAILURE,
        error: response.error
      }))
  }
}

确保正确设置了redux-thunk中间件。真的建议阅读有关redux的文档,以及这篇很棒的文章,以加深了解。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Redux Toolkit的createSlice中使用Redux-Thunk?

来自分类Dev

如何在React redux中使用Ajax调用加载初始数据集?

来自分类Dev

如何使用axios使用redux-thunk进行调度

来自分类Dev

如何在 React JS 中使用 Redux 和 Axios?

来自分类Dev

如何在react-redux-thunk中使用reducer编写动作的集成测试

来自分类Dev

如何在jsp中使用jquery ajax?

来自分类Dev

如何在Ajax验证中使用WTForms?

来自分类Dev

如何在Brython中使用Ajax

来自分类Dev

如何在节点js中使用ajax?

来自分类Dev

如何在pagedList中使用ajax

来自分类Dev

如何在Silex中使用Ajax查询?

来自分类Dev

如何在Ajax验证中使用WTForms?

来自分类Dev

如何在Ajax中使用插入模式

来自分类Dev

如何在ajax脚本中使用IF语句?

来自分类Dev

如何在magento后端中使用ajax

来自分类Dev

如何在Django中使用AJAX发布

来自分类Dev

如何在Ajax中使用JSON模式

来自分类Dev

如何在ajax中使用AntiForgeryToken

来自分类Dev

如何在 Ajax 中使用标题

来自分类Dev

如何在 $.ajax POST 中使用 RedirectToAction?

来自分类Dev

如何在 Promise & Ajax 中使用数据

来自分类Dev

我如何在 Laravel 中使用 Ajax?

来自分类Dev

如何在React上正确使用redux-thunk?

来自分类Dev

如何在koa中使用thunk获得readStream?

来自分类Dev

如何在React中使用Redux的Provider

来自分类Dev

如何在getInitialProps中使用Redux钩子

来自分类Dev

如何在 redux 中使用异步操作

来自分类Dev

如何在Angular中使用jQuery ajax调用中的Promise

来自分类Dev

如何在Yii :: app()-> clientScript-> registerScript中使用ajax