我是开发React应用程序的新手。所以,我有一些问题。 在mapDispatchToProps中访问状态属性的最佳实践是什么?在mDTP函数中使用ownProps.store.getState()是一种不好的做法吗? 在mDTP中使用第二个参数的原因是什么(除了在容器组件中传递其他属性之外)?
请告知有关该主题的内容。 非常感谢你!抱歉,我的语言。
答案 0 :(得分:0)
此答案可能会帮助您:
当遵循“容器”>“组件”模式时,存在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?