export interface IUser {
id: number,
name: string
}
interface IState {
user: IUser
}
const initUserState: IState = {
user: {
id: 0,
name: ''
}
}
export enum IUserActionType {
INIT,
CHANGE,
}
const user = (state:IState = initUserState, action: { type: IUserActionType, payload: any }) => {
switch (action.type) {
case IUserActionType.INIT:
return state
case IUserActionType.CHANGE:
return {...state, ...action.payload}
default:
return state
}
}
export default user
src/store/index.ts
import { combineReducers } from "redux";
import user from "./user";
export default combineReducers({user})
src/store/index.ts
import { createStore, applyMiddleware } from "redux";
import { composeWithDevTools } from "redux-devtools-extension";
import reducers from "./reducers";
export type rootState = ReturnType
const store = createStore(reducers, composeWithDevTools(applyMiddleware()))
export default store
4. 组件使用
类组件
import React, { Component } from 'react'
import { connect } from 'react-redux'
import { Dispatch } from 'redux'
import { rootState } from './store'
import { IUser, IUserActionType } from './store/reducers/user'
interface IProps {
user?: IUser,
changeName?(): void
}
class Example extends Component {
handleChangeName = () => {
this.props.changeName && this.props.changeName()
}
render() {
return (