Передача второго аргумента (ownProps) в mapDispatchToProps - плохая практика? - PullRequest
0 голосов
/ 23 ноября 2018

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

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

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

У меня есть «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?

0 голосов
/ 23 ноября 2018

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

Что такое 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.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...