将第二个参数(ownProps)传递给mapDispatchToProps-不好的做法吗?

时间:2018-11-23 10:08:56

标签: reactjs redux

我是开发React应用程序的新手。所以,我有一些问题。 在mapDispatchToProps中访问状态属性的最佳实践是什么?在mDTP函数中使用ownProps.store.getState()是一种不好的做法吗? 在mDTP中使用第二个参数的原因是什么(除了在容器组件中传递其他属性之外)?

请告知有关该主题的内容。 非常感谢你!抱歉,我的语言。

2 个答案:

答案 0 :(得分:0)

此答案可能会帮助您:

What is mapDispatchToProps?

当遵循“容器”>“组件”模式时,存在

mapDispatchToProps可以通过组件访问减速器。

例如,我有以下减速器:

const updateToPreviousMonth = (state) => {
    let newState = state,
        currentMonth = newState.get('currentMonth');
    let previousMonth = sanitizedDate(moment(currentMonth).subtract(1, 'month'));

    return newState.set('currentMonth', previousMonth);
};

const updateSelectedDate = (state, action) => {
    return state.set('selectedDate', action.selectedDate);
};

export default (state = initialState, action = {}) => {
    switch (action.type) {
        case constants.SET_TO_PREVIOUS_MONTH:
            return updateToPreviousMonth(state);
        case constants.UPDATE_SELECTED_DATE:
            return updateSelectedDate(state, action);
        default:
            return state;
    }
};

这些常量是操作和返回更改后状态的函数(归约器)。

const mapDispatchToProps = {
    setToPreviousMonth: CalendarViewRedux.actions.setToPreviousMonth,
    updateSelectedDate: CalendarViewRedux.actions.updateSelectedDate
};

export class CalendarView extends PureComponent {
    componentDidMount() {
        this.props.loadSchedules();
    }

    render() {
        return (<CalendarViewRender
            {...this.props} />);
    }
}

export default connect(mapStateToProps, mapDispatchToProps)(CalendarView);

在此示例中,我在mapDispatchToProps中传递动作,并且在调用它们时,它们将激活以前的reducer,因为我使用了mapDispatchToProps,所以现在它们可以在CalendarView组件中使用。

希望这会有所帮助,如果有帮助,请标记为已解决。

答案 1 :(得分:0)

如果我需要重置状态(在我的情况下,如果用户登录或注销,则需要显示其他屏幕),我的mapDispatchToProps上有'ownProps'可以导航到HomeScreen。这是示例:

const mapDispatchToProps = (dispatch, ownProps) => {
  return {
    onChangeText: (key, value) => {
      dispatch(onChangeField(key, value))
    },

    goToHomeScreen: () => {
      ownProps.navigation.dispatch(StackActions.reset({index: 0, key: null, actions: [NavigationActions.navigate({ routeName: 'LoggedDrawer'})]}))
    },
  }
}

要打电话给我,我只需这样做:

this.props.goToHomeScreen();

此外,我相信这可以帮助您: What is the use of the ownProps arg in mapStateToProps and mapDispatchToProps?