redux-thunk 示例

本文详细介绍了如何在React应用中使用Redux进行状态管理,包括创建store、使用中间件、异步操作处理及从函数组件到Class组件的转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import 'antd/dist/antd.css';
import React from 'react';
import ReactDOM from 'react-dom';
import {Button} from 'antd';
import { createStore,combineReducers,applyMiddleware } from 'redux';

import createLogger from 'redux-logger';
import thunk from 'redux-thunk';


const text = (state=0,action)=>{
    const {type,payLoad} = action;
    switch(type){
        case 'TEXT':
            return Object.assign({},state,{userName:payLoad});
        default:
            return state;
    }
}

const chatReducer = combineReducers({
    text
})

let {getState,subscribe,dispatch} = createStore(
    chatReducer,
    applyMiddleware(thunk,createLogger),
);

function getData(){
    console.log('getData');
    var url = 'https://douban.uieee.com/v2/movie/in_theaters';

    return fetch(url).then((res)=>{
        return res.json()
    }).then(data=>{
        console.log('data',data);
        return data.title;
    })
}

const TextContent =({value,onText})=>{
    return  <div>
                <h1>{value.text.userName}</h1>
            </div>
}

function Content(){
    return(
        <div>
            <TextContent
                value={getState()}
            />
            <Button onClick={() => clickEvent()}>点击</Button>
        </div>
    )
}

function clickEvent () {
    dispatch(funs())
}

function funs() {
    return function (dispatch) {
        dispatch({
            type: 'TEXT',
            payLoad: 'titile starting.........'
        });
        getData().then(res => {
            console.log('res',res);
            dispatch({
                type: 'TEXT',
                payLoad: res
            })
        }).catch(err => {
            dispatch({
                type: 'TEXT',
                payLoad: 'titile errors........'
            })
        })
    }
}

const render=()=>{
    ReactDOM.render(
        <Content/>,
        document.getElementById('root')
    )
}
render();
subscribe(render);

下面我们把Content函数组件改成class组件

import 'antd/dist/antd.css';
import React,{Component} from 'react';
import ReactDOM from 'react-dom';
import {Button} from 'antd';
import { createStore,combineReducers,applyMiddleware } from 'redux';

import createLogger from 'redux-logger';
import thunk from 'redux-thunk';


const text = (state=0,action)=>{
    const {type,payLoad} = action;
    switch(type){
        case 'TEXT':
            return Object.assign({},state,{userName:payLoad});
        default:
            return state;
    }
}

const chatReducer = combineReducers({
    text
})

let {getState,subscribe,dispatch} = createStore(
    chatReducer,
    applyMiddleware(thunk,createLogger),
);

function getData(){
    console.log('getData');
    var url = 'https://douban.uieee.com/v2/movie/in_theaters';

    return fetch(url).then((res)=>{
        return res.json()
    }).then(data=>{
        console.log('data',data);
        return data.title;
    })
}

const TextContent =({value,onText})=>{
    return  <div>
                <h1>{value.text.userName}</h1>
            </div>
}

class Content extends Component{
    constructor(props){
       super(props);
    }
    clickEvent=()=>{
        console.log('clickEvent');
        dispatch(this.funs());
    }
    funs(){
        return function (dispatch) {
            dispatch({
                type: 'TEXT',
                payLoad: 'titile starting.........'
            });
            getData().then(res => {
                console.log('res',res);
                dispatch({
                    type: 'TEXT',
                    payLoad: res
                })
            }).catch(err => {
                dispatch({
                    type: 'TEXT',
                    payLoad: 'titile errors........'
                })
            })
        }
    }

    render(){
        return (
            <div>
                <TextContent
                    value={getState()}
                />
                <Button onClick={this.clickEvent}>点击</Button>
            </div>
        )
    }
}

const render=()=>{
    ReactDOM.render(
        <Content/>,
        document.getElementById('root')
    )
}
render();
subscribe(render);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值