我在redux中加载数据时遇到问题,reducer在调用我的文件时丢失了我的数据,请帮助我。
我的主src/index.tsx
import React from 'react'
import {Provider} from 'react-redux'
import ReactDOM from 'react-dom'
import App from './App'
import store from './redux/stores'
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
)
我的文件获取数据活动标题
export class CampaingHeader {
private token: any
private resp_campaing_header: any
constructor(token: any){
this.token = token
}
/*
get last campaing for the current user
*/
getLastCampaingHeader = async() => {
this.resp_campaing_header = await API.get(`campaing-header-last`,{
headers: {Authorization: `Bearer ${this.token}`}
})
return this.resp_campaing_header
}
}
我在redux 中的文件
类型
/redux/types/campaing.types.tsx
export const SET_CAMPAING = 'SET_CAMPAING'
export const LOADING_CAMPAING = 'LOADING_CAMPAING'
export const SET_DEFAULT_CAMPAING = 'SET_DEFAULT_CAMPAING'
export const SET_ERRORS = 'SET_ERRORS'
减速器/redux/reducers/campaing.reducers.tsx我的问题是这个文件
import {
SET_DEFAULT_CAMPAING,
SET_CAMPAING,
SET_ERRORS
} from '../types/campaing.types'
const InitCampaingState = {
answer: false,
campaing: {},
errors: {}
}
export default function(state = InitCampaingState, action: any) {
// HERE LOAD MY DATA
console.info(action.payload)
switch (action.type) {
// BUT HERE NOT LOADED
case SET_CAMPAING:
return {
...state,
answer: true,
campaing: action.payload // ALWAYS payload is undefined
}
default:
return state // AND RETURN STATE
}
}
我的文件操作/redux/actions/campaing.actions.tsx
import {
SET_CAMPAING,
SET_ERRORS,
} from '../types/campaing.types'
import {CampaingBody} from '../../userCampaings'
let token = window.sessionStorage.getItem('token')
let CampHeader = new CampaingBody(token)
export const RetrieveCampaing = (campaing_id: number) => (dispatch: any) => {
CampHeader.getRetrieveCBody(campaing_id)
.then(resp =>{
console.info(resp.data.data)// DATA IS LOADED HERE
dispatch({
type: SET_CAMPAING,
payload: resp.data.data,// HERE LOADED DATA TOO
})
}).catch(err =>{
dispatch({
type: SET_ERRORS,
errors: err
})
})
}
当获得campaign的ID时,下面的代码运行良好,将ID campaign传递到/redux/actions/ccampaing.actions.tsx 中的我上面的代码
import React from 'react'
import {connect} from 'react-redux'
// call my actions
import {RetrieveCampaing} from '../../../../redux/actions/campaing.actions'
const UpdateCampaing: React.FC = (props: any) => {
React.useEffect(()=>{
// HERE PASS DATA CORRECTLY
let ID = GetCampID()
props.RetrieveCampaing(ID)
},[])
return(....)
}
const mapStateToProps = (state: any) => ({
campaing: state.campaing
})
const mapActionToProps = {
RetrieveCampaing
}
export default connect(mapStateToProps, mapActionToProps)(UpdateCampaing)
当我尝试共享来自操作的数据时,我的问题就在这里,使用连接不起作用。
import React from 'react'
import {connect} from 'react-redux'
type FormData = {
profile: Iuser
first_name: string
last_name: string
email: string
cinit: string
}
interface Icampaing {
campaing: FormData
}
const Personal: React.FC<Icampaing> = ({campaing})=>{
React.useEffect(()=>{
//MY PROBLEM IS HERE NOT LOAD DATA
console.info('from redux')
console.info(campaing) // RETURN DATA InitCampaingState, from my type files
},[])
}
return(<div>{campaing.cinit}</div>)
}
const mapStateToProps = (state: any) =>({
campaing: state.campaing
})
export default connect(mapStateToProps)(Personal)
我的问题在REDUCER文件中,因为数据已加载,但不返回数据。
请帮帮我,我不知道我的错误在哪里,通常都很好,我的意思是,将数据加载到反操作文件中可以工作,但当我将操作调用到反个人文件中时,不工作
最好的话。
具有空数组[]
的UseEffect
与componentDidMount
类似,只调用一次。
你需要将campaing
添加到数组中,每次战役道具更改时都会调用你的useEffect
钩子:
const Personal: React.FC<Icampaing> = ({campaing})=>{
React.useEffect(()=>{
//MY PROBLEM IS HERE NOT LOAD DATA
console.info('from redux')
console.info(campaing) // RETURN DATA InitCampaingState, from my type files
},[campaing])
}