Javascript 尝试使用this.props.dispatch并返回一个非函数
我试图从数据库中删除一个项目,但当我访问该函数时,会说Javascript 尝试使用this.props.dispatch并返回一个非函数,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我试图从数据库中删除一个项目,但当我访问该函数时,会说\u this.props.dispatch不是一个函数。(在“\u this.props.dispatch((0,\u actions.deleteJob)(\u this.props.id))”中,“\u this.props.dispatch”未定义) 这是我调用函数删除我的项目的代码。函数onDelete()我在用户交互后调用它 class JobItem extends Component { constructor(props
\u this.props.dispatch不是一个函数。(在“\u this.props.dispatch((0,\u actions.deleteJob)(\u this.props.id))”中,“\u this.props.dispatch”未定义)
这是我调用函数删除我的项目的代码。函数onDelete()
我在用户交互后调用它
class JobItem extends Component {
constructor(props) {
super(props)
this.state = {
activeRowKey: null,
deleting: false
};
}
onDelete = () => {
this.setState({deleting: true});
this.props.dispatch(deleteJob(this.props.id)); // HERE is the error
}
render() {
const swipeSettings = {
autoClose: true,
onClose: (secId, rowId, direction) => {
this.setState({ activeRowKey: null });
},
onOpen: (secId, rowId, direction) => {
this.setState({ activeRowKey: this.props.id });
},
right: [
{
onPress: () => {
const deletingRow = this.state.activeRowKey;
Alert.alert(
'Alert',
'Are you sure you want to delete?',
[
{text: 'No', onPress: () => console.log('Cancel Pressed'), style:'cancel'},
{text: 'Yes', onPress: () => {
this.onDelete();
// Refresh Job List
this.props.parentFlatList.refreshJobList(deletingRow);
}},
],
{ cancelable: true }
)
},
text: 'Delete', type: 'delete'
}
],
rowId: this.props._id,
sectionId: 1
}
这里是deleteJob()
函数,它实际上是从DB中删除它的
export function deleteJob(job_id) {
return function (dispatch) {
return axios.delete(JOB_URL(user_id, job_id), {
headers: { authorization: token }
}).then((response) => {
dispatch(removeJob(job_id));
}).catch((err) => {
dispatch(addAlert("Couldn't delete job."));
});
};
}
工作项
var renderJobs = () => {
return this.props.jobs.map((job) => {
return (
<JobItem
parentFlatList={this}
key={job._id}
title={job.title}
shortDescription={job.shortDescription}
logo={job.avatar}
company={job.company}
id={job._id}/>
)
})
}
var mapStateToProps = (state) => {
return {
jobs: state.jobs
}
}
module.exports = connect(mapStateToProps)(JobList);
var renderJobs=()=>{
返回此.props.jobs.map((作业)=>{
返回(
)
})
}
var mapStateToProps=(状态)=>{
返回{
乔布斯:州立大学
}
}
module.exports=connect(mapStateToProps)(作业列表);
你知道我该如何解决这个问题吗?我想你忘了将分派传递给JobItem了
<JobItem
parentFlatList={this}
key={job._id}
title={job.title}
shortDescription={job.shortDescription}
logo={job.avatar}
company={job.company}
id={job._id}
dispatch={this.props.dispatch} /* <-- this one here */
/>
解决此问题的一种方法是将JobItem放入容器中。 像这样的
module.exports=connect(mapStateToProps,dispatch=>({dispatch}))(JobItem) 你能在连接到Redux的
JobItem
处添加代码吗?@riwu请看我的编辑仍然没有看到调用了connect
的部分。你可能缺少mapDispatchToProps
@riwu我现在添加了renderJobs
你是说JobList
中的渲染方法吗?这实际上是用来删除的但它只从视图中删除它。如果我往下滑,它会重新出现。它不会从数据库中删除它。这是我删除时服务器在终端中返回的内容,然后我刷新页面“delete/v1/users/5adaa55c0364d01cd9478492/jobs/5adaa5ff0364d01cd9478497 HTTP/1.1“200 2”-“Expo/2.4.7.1013849 CFNetwork/897.15 Darwin/17.5.0”
,然后我刷新“GET/v1/users/5adaa55c0364d01cd9478492/jobs HTTP/1.1”304-““Expo/2.4.7.1013849 CFNetwork/897.15 Darwin/17.5.0”
请告诉我您是如何使用redux配置deleteJob的。在reducer或action中?我相信您已经将deleteJob配置为中间件,它正在侦听操作并执行预期操作。