React-Redux,在调度函数时,"uncaught TypeError is not a function"
React-Redux, when dispatching a function, "uncaught TypeError is not a function"
我遇到了一个问题,当我想要分派一个动作时,fetchRewardByPromoCodeAction
它说我想要分派的动作不是一个函数。
在表单中,我使用事件处理程序 onSubmit
然后使用 handleSubmit
。我注意到我的 props
变得未定义,这让我认为 connect 函数没有按预期工作。任何帮助都会有所帮助。这是代码。
import React, { Component } from 'react';
import { connect
} from 'react-redux';
import PromoCodeInput from 'components/promoCodeForm/PromoCodeInput';
import { fetchRewardByPromoCode, resetValidations } from 'rewards/ducks';
import Button from 'button/Button';
export class AdminRewardPage extends Component<Props> {
constructor(props) {
super(props);
this.state = {
promoCodeText: '',
};
}
onPromoCodeChange = (event) => {
this.setState({
promoCodeText: event.target.value,
});
const { resetValidationsAction } = this.props;
resetValidationsAction();
};
handleSubmit = (event) => {
event.preventDefault()
const { fetchRewardByPromoCodeAction } = this.props;
const { promoCodeText } = this.state;
fetchRewardByPromoCodeAction(promoCodeText);
}
render() {
const { promoCodeText } = this.state
return (
<div>
<h1>AdminRewardPage</h1>
<form onSubmit={this.handleSubmit}>
<PromoCodeInput inputValue={promoCodeText} onChangeHandler={this.onPromoCodeChange} />
<Button type="submit" label="Find By PromoCode" fullWidth />
</form>
</div>
)
}
}
const mapDispatchToProps = (dispatch) => ({
resetValidationsAction: () => dispatch(resetValidations()),
fetchRewardByPromoCodeAction: (promoCodeText) => dispatch(fetchRewardByPromoCode(promoCodeText)),
});
export default connect(null, mapDispatchToProps)(AdminRewardPage);
in rewards/ducks.js
export const fetchRewardByPromoCode = (promoCode: string): FSAModel => ({
type: FETCH_REWARD_BY_PROMOCODE,
payload: promoCode,
})
---编辑--带--答案---
@Bartek Fryzowicz 帮助我找到了正确的方向。我忘了查看我的 index.js 文件,我的路线
之前我有
import { AdminRewardPage } from 'scenes/AdminRewardPage'
instead of
import AdminRewardPage from 'scenes/AdminRewardPage'
<Router history={ history }>
<Switch>
<Route exact path={ `/rewards` } component={AdminRewardPage} />
</Switch>
</Router>
我懒得看我是怎么导入的。
课程
查看您的文件导入和导出的位置和方式。
您正在尝试在 mapDispatchToProps
中调用 fetchRewardByPromoCode
函数,但此类函数 (fetchRewardByPromoCode
) 未在 mapDispatchToProps
范围内或父范围内声明。也许你忘了导入它?
答案更新:
请确保在使用组件时使用默认导出(未命名导出),因为命名导出是未连接到 redux 存储的展示组件。你必须使用连接到 redux 的容器组件,所以确保你像这样导入它:
import AdminRewardPage from '/somePath'
没有
import { AdminRewardPage } from '/somePath'
我遇到了一个问题,当我想要分派一个动作时,fetchRewardByPromoCodeAction
它说我想要分派的动作不是一个函数。
在表单中,我使用事件处理程序 onSubmit
然后使用 handleSubmit
。我注意到我的 props
变得未定义,这让我认为 connect 函数没有按预期工作。任何帮助都会有所帮助。这是代码。
import React, { Component } from 'react';
import { connect
} from 'react-redux';
import PromoCodeInput from 'components/promoCodeForm/PromoCodeInput';
import { fetchRewardByPromoCode, resetValidations } from 'rewards/ducks';
import Button from 'button/Button';
export class AdminRewardPage extends Component<Props> {
constructor(props) {
super(props);
this.state = {
promoCodeText: '',
};
}
onPromoCodeChange = (event) => {
this.setState({
promoCodeText: event.target.value,
});
const { resetValidationsAction } = this.props;
resetValidationsAction();
};
handleSubmit = (event) => {
event.preventDefault()
const { fetchRewardByPromoCodeAction } = this.props;
const { promoCodeText } = this.state;
fetchRewardByPromoCodeAction(promoCodeText);
}
render() {
const { promoCodeText } = this.state
return (
<div>
<h1>AdminRewardPage</h1>
<form onSubmit={this.handleSubmit}>
<PromoCodeInput inputValue={promoCodeText} onChangeHandler={this.onPromoCodeChange} />
<Button type="submit" label="Find By PromoCode" fullWidth />
</form>
</div>
)
}
}
const mapDispatchToProps = (dispatch) => ({
resetValidationsAction: () => dispatch(resetValidations()),
fetchRewardByPromoCodeAction: (promoCodeText) => dispatch(fetchRewardByPromoCode(promoCodeText)),
});
export default connect(null, mapDispatchToProps)(AdminRewardPage);
in rewards/ducks.js
export const fetchRewardByPromoCode = (promoCode: string): FSAModel => ({
type: FETCH_REWARD_BY_PROMOCODE,
payload: promoCode,
})
---编辑--带--答案---
@Bartek Fryzowicz 帮助我找到了正确的方向。我忘了查看我的 index.js 文件,我的路线
之前我有
import { AdminRewardPage } from 'scenes/AdminRewardPage'
instead of
import AdminRewardPage from 'scenes/AdminRewardPage'
<Router history={ history }>
<Switch>
<Route exact path={ `/rewards` } component={AdminRewardPage} />
</Switch>
</Router>
我懒得看我是怎么导入的。
课程
查看您的文件导入和导出的位置和方式。
您正在尝试在 mapDispatchToProps
中调用 fetchRewardByPromoCode
函数,但此类函数 (fetchRewardByPromoCode
) 未在 mapDispatchToProps
范围内或父范围内声明。也许你忘了导入它?
答案更新:
请确保在使用组件时使用默认导出(未命名导出),因为命名导出是未连接到 redux 存储的展示组件。你必须使用连接到 redux 的容器组件,所以确保你像这样导入它:
import AdminRewardPage from '/somePath'
没有
import { AdminRewardPage } from '/somePath'