美文网首页
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请求实例

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