gpt4 book ai didi

javascript - mapStateToProps 将数据传递给 Prop

转载 作者:行者123 更新时间:2023-11-30 20:29:22 27 4
gpt4 key购买 nike

我正在构建一个员工轮类系统,我有一个 mapStateToProps 函数,但是 props rotaData 返回时未定义这是我的 Action :

import settings from '../../aws-config.js';
import Amplify, { Auth, API } from 'aws-amplify';
export const GET_STAFF_SHIFTS = 'get_staff_shifts';
export function getShifts() {
console.log('Fetching list of shifts for user...');

const request = API.get("StaffAPI", "/shifts", {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
});
return {
type : GET_STAFF_SHIFTS,
payload : request
}
}

这是我的 reducer

import _ from "lodash"
import { GET_STAFF_SHIFTS} from '../actions';

export default function(state = {}, action) {
switch(action.type){
case GET_STAFF_SHIFTS:
return { ...state, rotaData: action.payload.data };
}
}

这是我的 mapStateToProps 函数

function mapStateToProps(state){
return{ rotaData: state.rotaData };
}
export default connect(mapStateToProps, {getShifts: getShifts})
(StaffRota);

但是在我的 StaffRota 类中,当控制台记录 this.props 时,rotaData 返回未定义。

对此有什么帮助吗?

最佳答案

API.get() 不是同步的,而是返回一个 Promise,因此您需要等待它完成,然后在加载完成时分派(dispatch)另一个操作。您需要安装 redux-thunk 才能分派(dispatch)函数。

export const getShifts = () => dispatch => {
const request = API.get("StaffAPI", "/shifts", {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
})
.then(response =>
dispatch({type: 'SHIFTS_LOAD_SUCCESS', response})
)
.catch(err =>
dispatch({type: 'SHIFTS_LOAD_FAIL'})
)
}

然后您可以在包含响应的缩减器中处理 SHIFTS_LOAD_SUCCESS。然后在您的 mapDispatchToProps 中,您可以将 getShifts 函数作为 Prop 提供给您的组件:

export default connect(mapStateToProps, dispatch => {loadAllShifts: dispatch(getShifts())})(...)

关于javascript - mapStateToProps 将数据传递给 Prop ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50526504/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com