Передача второго аргумента (ownProps) в mapDispatchToProps - это плохая практика?

Я новичок в разработке приложения React. Итак, у меня есть вопросы. Как лучше всего получить доступ к свойствам состояния внутри mapDispatchToProps? Использование ownProps.store.getState () в функции mDTP - плохая практика? В чем причина использования второго аргумента в mDTP (кроме передачи дополнительных свойств в компоненты контейнера)?

Посоветуйте, пожалуйста, что почитать по этой теме. Большое тебе спасибо! Извините за мой язык.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
587
2

Ответы 2

Этот ответ может вам помочь:

Что такое 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, и при вызове они активируют редукторы, которые были раньше, поскольку я использовал mapDispatchToProps, теперь они доступны в компоненте CalendarView.

Надеюсь, это поможет, отметьте как решенное, если это было полезно.

У меня есть ownProps на моем mapDispatchToProps для перехода к 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();

Кроме того, я считаю, что это может помочь: Какая польза от аргумента ownProps в mapStateToProps и mapDispatchToProps?

Другие вопросы по теме