为什么我的道具带回了动作功能,而不是日期?
Why is my props bringing back the action function, not the date?
我有一个正在拉取一些数据的 React 应用程序,它变成了一个承诺,所以我正在使用 Thunk。但是,当我登录 this.props
时,getShift 操作作为函数打印出来。
日志returns:
{getShifts: ƒ}getShifts: ƒ ()proto: Object
操作:
import settings from '../../aws-config.js';
import Amplify, { Auth, API } from 'aws-amplify';
export const GET_STAFF_SHIFTS = 'get_staff_shifts';
export const SHIFTS_LOAD_FAIL = 'shifts_load_fail';
export const getShifts = () => dispatch => {
console.log('Fetching list of shifts for user...');
const request = API.get("StaffAPI", "/shifts", {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
})
.then(response =>
dispatch({
type: 'GET_STAFF_SHIFTS',
payload: response
})
)
.catch(err =>
dispatch({type: 'SHIFTS_LOAD_FAIL'})
)
}
减速器:
import { getShifts, GET_STAFF_SHIFTS} from '../actions';
export default function(state = {}, action) {
switch(action.type){
case GET_STAFF_SHIFTS:
return Object.assign({}, state,{
start_time: action.payload
})
default:
return state;
}
}
操作:
import React, { Component } from 'react';
import Amplify, { Auth, API } from 'aws-amplify';
import {connect} from 'react-redux';
import {bindActionCreators} from 'redux';
import {getShifts} from '../actions/index';
import settings from '../../aws-config.js';
Amplify.configure(settings);
class StaffRota extends Component {
componentWillMount() {
this.props.getShifts();
}
renderPosts(){
console.log(this.props);
return (
<div></div>
);
}
}
function MapDispatchToProps(dispatch) {
return bindActionCreators({ getShifts }, dispatch);
}
export default connect(null, MapDispatchToProps)(StaffRota);
动作创建者应该是一个函数,这是预期的。所以控制台日志记录 this.props.getShifts
会给你一个功能。
这里有两个问题:
首先你派发了错误的动作类型
dispatch({type: 'GET_STAFF_SHIFTS', ... })
而不是您在减速器中期望的 dispatch({type: GET_STAFF_SHIFTS, ... })
。
其次,您应该通过 mapStateToProps
函数
使用 redux state
function MapDispatchToProps(dispatch) {
return bindActionCreators({ getShifts }, dispatch);
}
function MapStateToProps(state) {
return {
shift: state.start_time OR state.your_reducer.start_time
}
}
export default connect(MapStateToProps, MapDispatchToProps)(StaffRota);
并通过 this.props.shift
.
使用此状态(映射到 prop)
我有一个正在拉取一些数据的 React 应用程序,它变成了一个承诺,所以我正在使用 Thunk。但是,当我登录 this.props
时,getShift 操作作为函数打印出来。
日志returns: {getShifts: ƒ}getShifts: ƒ ()proto: Object
操作:
import settings from '../../aws-config.js';
import Amplify, { Auth, API } from 'aws-amplify';
export const GET_STAFF_SHIFTS = 'get_staff_shifts';
export const SHIFTS_LOAD_FAIL = 'shifts_load_fail';
export const getShifts = () => dispatch => {
console.log('Fetching list of shifts for user...');
const request = API.get("StaffAPI", "/shifts", {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
})
.then(response =>
dispatch({
type: 'GET_STAFF_SHIFTS',
payload: response
})
)
.catch(err =>
dispatch({type: 'SHIFTS_LOAD_FAIL'})
)
}
减速器:
import { getShifts, GET_STAFF_SHIFTS} from '../actions';
export default function(state = {}, action) {
switch(action.type){
case GET_STAFF_SHIFTS:
return Object.assign({}, state,{
start_time: action.payload
})
default:
return state;
}
}
操作:
import React, { Component } from 'react';
import Amplify, { Auth, API } from 'aws-amplify';
import {connect} from 'react-redux';
import {bindActionCreators} from 'redux';
import {getShifts} from '../actions/index';
import settings from '../../aws-config.js';
Amplify.configure(settings);
class StaffRota extends Component {
componentWillMount() {
this.props.getShifts();
}
renderPosts(){
console.log(this.props);
return (
<div></div>
);
}
}
function MapDispatchToProps(dispatch) {
return bindActionCreators({ getShifts }, dispatch);
}
export default connect(null, MapDispatchToProps)(StaffRota);
动作创建者应该是一个函数,这是预期的。所以控制台日志记录 this.props.getShifts
会给你一个功能。
这里有两个问题:
首先你派发了错误的动作类型
dispatch({type: 'GET_STAFF_SHIFTS', ... })
而不是您在减速器中期望的 dispatch({type: GET_STAFF_SHIFTS, ... })
。
其次,您应该通过 mapStateToProps
函数
state
function MapDispatchToProps(dispatch) {
return bindActionCreators({ getShifts }, dispatch);
}
function MapStateToProps(state) {
return {
shift: state.start_time OR state.your_reducer.start_time
}
}
export default connect(MapStateToProps, MapDispatchToProps)(StaffRota);
并通过 this.props.shift
.