美文网首页
axios ajax请求实例

axios ajax请求实例

作者: 林ze宏 | 来源:发表于2018-11-11 00:00 被阅读0次

说明

该实例是以dva命令创建的项目:$ dva new dva-quickstart
技术栈:dva + axios + redux-actions

目录结构

路由

src/router.js

import React from 'react';
import { Router, Route, Switch } from 'dva/router';
import IndexPage from './routes/IndexPage';
import Products from './routes/Products';
import Counter from './routes/Counter';
import UserPage from './routes/UserPage';

function RouterConfig({ history }) {
  return (
    <Router history={history}>
      <Switch>
        <Route path="/" exact component={IndexPage} />
        <Route path="/products" exact component={Products} />
        <Route path="/counter" exact component={Counter} />
        <Route path="/user" exact component={UserPage} />
      </Switch>
    </Router>
  );
}

export default RouterConfig;



UI Component

src/routers/UserPage.js:

import React from 'react';
import { connect } from 'dva';
import { userfetch } from '../actions';

const UserPage = (props) => {
  const { userfetch } = props;
  const { isFetch, error, user } = props.user;
    let data = "";
    if (isFetch) {
      data = '正在加载中。。。'
    } else if (user) {
      data = user.data[0]['name'];
    } else if (error) {
      data = error.message;
    }

  function start() {
    userfetch();
  }

  return(
    <div>
      <h1>User</h1>
      <p>{data}</p>
      <p>
        <button onClick={start}>发送请求</button>
      </p>
    </div>
  )
}

const mapStateToProps = (state) => ({
  user: state.users
})

export default connect(mapStateToProps, { userfetch })(UserPage);


Model

src/models/user.js


import axios from 'axios';

export default {
  namespace: 'users',
  state: {
    isFetch: false,
    error: null,
    user: null
  },

  effects: {
    *'user/fetch'({ payload }, { call, put }) {  // eslint-disable-line
      yield put({ type: 'user/start' });
      try {
        const users = yield call(axios.get, 'https://11jsonplaceholder.typicode.com/users'); // axios.get('https://jsonplaceholder.typicode.com/users')      
        yield put({ type: 'user/sucess', uu: users });
      } catch (e) {
        yield put({ type: 'user/fail', errors: e });
      }
    },
  },

  reducers: {
    'user/start'(state, action) {
      return { 
        ...state,
        isFetch: true,
        error: null,
        user: null
      };
    },
    'user/sucess'(state, action) {
      return { 
        ...state,
        isFetch: false,
        error: null,
        user: action.uu
      };
    },
    'user/fail'(state, action) {
      return { 
        ...state,
        isFetch: false,
        error: action.errors,
        user: null
      };
    },
  },

};



action(redux-actions)

src/actions/index.js

import { createAction } from 'redux-actions'; // 主要利用createAction这个方法

// counter
export const counterAdd = createAction('counter/add');
export const counterAsayAdd = createAction('counter/asayAdd');

// Products
export const productsDelete = createAction('products/delete');

// user
export const userfetch = createAction('users/user/fetch');


相关文章

  • axios ajax请求实例

    说明 该实例是以dva命令创建的项目:$ dva new dva-quickstart技术栈:dva + axio...

  • axios的配置

    一、axios 1、axios是对ajax请求的封装 2、ajax (1):Asynchronous Javasc...

  • react 发送ajax请求

    ajax请求 发送ajax请求的几种方式JQuery:一般不用,太重,不是专事专做axios: axios.get...

  • 六、Vue.js

    一、发送AJAX请求 1.简介 2,使用axios发送ajax请求 2.1安装axios并引入 2.1基本用法 3...

  • React中的“ajax”

    React没有ajax模块 集成其他的js库(如axios/fetch/jquery),发送ajax请求axios...

  • Vue项目集成Axios支持Restful调用

    Vue项目集成Axios支持Restful调用 Axios是前端Http请求工具,集成ajax请求,提供Promi...

  • 【axios源码】封装ajax请求

    文本主要涉及到axios封装ajax请求的方法,首先从自己封装一个ajax请求会遇到的困难出发,然后看axios源...

  • JS async/await-ajax异步请求等待返回数据

    JS async/await-ajax异步请求等待返回数据 例子使用的是 axios 做ajax请求 在vue中使...

  • Axios

    axios是配合vue发送请求的一个库,区别于ajax在于ajax的使用大多需要依赖jquery库,而axios则...

  • 发送ajax请求

    发送ajax请求 vue本身不支持发送ajax请求,需要使用vue-resourc axios等插件实现,建议使用...

网友评论

      本文标题:axios ajax请求实例

      本文链接:https://www.haomeiwen.com/subject/ipraxqtx.html