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配置为中间件,它正在侦听操作并执行预期操作。