react redux-thunk实现网络请求的三种方式

首次定义三种状态常量

constants/index.js

export const FETCH_USER_SUCCESS = 'FETCH_USER_SUCCESS'//成功
export const FETCH_USER_REQUEST = 'FETCH_USER_REQUEST'//等待
export const FETCH_USER_FAILURE = 'FETCH_USER_FAILURE'//请求

2.在reducers/user.js引入常量

import {FETCH_USER_SUCCESS,FETCH_USER_REQUEST,FETCH_USER_FAILURE} from '../constants/index.js'

const initialState = {
    user:{},
    isFetching:false,
    error:null
}
const user = (state=initialState,action)=>{
    switch(action.type){
        case FETCH_USER_SUCCESS:
            return {
                user:action.user,
                error:null,
                isFetching:false
            };
        case FETCH_USER_REQUEST:
            return{
                isFetching:true,
                error:null,
                user:{}
            };
        case FETCH_USER_FAILURE:
            return{
                isFetching:false,
                error:action.error,
                user:{}
            };
        default:
            return state
    }
}
export default user;

3.在actions/user.js

import {FETCH_USER_SUCCESS,FETCH_USER_REQUEST,FETCH_USER_FAILURE} from '../constants/index.js'
// export function fetch_user(user){
//     return{
//         type:FETCH_USER_SUCCESS,
//         user
//     }
// }
export const fetch_user_failure=(error)=>{
    return{
        type:FETCH_USER_FAILURE,
        error
    }
}
export const fetch_user=(user)=>{
    return{
        type:FETCH_USER_SUCCESS,
        user
    }
}
export const fetch_user_request=()=>{
    return{
        type:FETCH_USER_REQUEST
    }
}
export const get_user=()=>{
    return dispatch=>{
        dispatch(fetch_user_request())
        fetch('http://iwenwiki.com/api/blueberrypai/getChengpinDetails.php')
        .then(res=>res.json())
        .then(data=>{
           dispatch(fetch_user(data.chengpinDetails[0]))
        })
        .catch(error=>{
            dispatch(fetch_user_failure(error))
        })
    }
}

在页面中

import React from 'react';
import {connect} from 'react-redux';
import {bindActionCreators} from 'redux';
import * as userAction from '../reduxDemo/actions/user.js'
 class User extends React.Component{
    render(){
        console.log(this.props)
        const {error,isFetching,user} = this.props.user;
        let data;
        if(error){
            data = error;
        }else if(isFetching){
            data = 'Loading....'
        }else{
            data = user.title
        }
        return(
        <div>
            <p>{data}</p>
            <p>user</p>
            <button onClick={()=>{this.props.userAction.get_user()}}>getUser</button>
            </div>
        )
    }
}
const mapStateToProps = (state)=>{
    console.log(state);
    return{
        user:state.user
    }
}
const mapDispatchToProps=(dispatch)=>{
    return{
        userAction:bindActionCreators(userAction,dispatch)
    }
}
export default connect(mapStateToProps,mapDispatchToProps)(User)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值