1

我正在react-router-redux与 一起使用reduxreact-router并且react在这个 repo 中一切都运行良好:

https://github.com/justsayno/redux-react-introduction-code/tree/issue-branch

(查看分支issue-branch以重现我的问题)

我已经将react-router状态集成到我的 redux 状态中react-router-redux,并且可以成功地使用 mapStateToPropsemployeeId从道具中获取我需要的路由器参数,如下所示:

(以下内容来自该文件

const mapStateToProps = (state, ownProps) => ({ 
    employeeId : ownProps.params.employeeId,
    employee: state.selectedEmployee.item,
    hasLoaded: state.selectedEmployee.hasLoaded,
    hasError: state.selectedEmployee.hasError,
    error: state.selectedEmployee.error
})

在我的渲染函数中console.log(,employeeId 是 ${this.props.employeeId} ),当我路由到该组件并且参数发生变化时,它会发生变化。

但是由于我不明白的原因,当参数更改时这不会触发。

componentWillReceiveProps(nextProps){
    console.log(nextProps)
}

我想要实现的是对员工列表与单个员工的不同模拟 API 调用,当employeeId 参数发生更改时,我需要重新检索员工,否则我只能看到其中一名员工。我打算在我的componentWillReceiveProps函数中执行此操作,检查employeeId 的更改并启动一个操作(如果有的话):

componentWillReceiveProps(nextProps){
    const { employeeId, selectEmployee } = this.props
    if(nextProps.employeeId !== employeeId){
        selectEmployee(nextProps.employeeId)
    }
}

我只是接近这个错误吗?

4

1 回答 1

2

componentWillReceiveProps仅在道具更改时触发。在你的情况下,你有employeeIdset 的初始道具并且不会改变。你可以employeeId到达componentWillMount

而你的selectEmployee调用的问题是它没有 dispatch employeeSelected,因为hasLoaded被设置为一次trueEMPLOYEE_RECEIVED行动中,以后永远不会改变,所以selectEmployee在 dispatch 之前返回employeeSelected,假设在 中变hasLoaded回 false EMPLOYEE_SELECTED

于 2016-09-06T08:56:17.587 回答