Два вызова отправки в функции mapDispatchToProps

Из-за моего API мне нужно получать данные двумя отдельными вызовами. У меня есть общее асинхронное действие redux-thunk, которое принимает параметры, поэтому его можно вызвать несколькими способами.

ПоказатьПеоплеКонтейнер:

import { fetchPeople } from './actions';
import { getEmployees, getManagers } from './selectors';

const mapDispatchToProps = dispatch({
   getData: () => {
    dispatch(fetchPeople('employees'));
    dispatch(fetchPeople('managers'));
   }
});

const mapStateToProps = state => ({
  employees: getEmployees(state),
  managers: getManagers(state)
});
export default connect(
  mapStateToProps,
  mapDispatchToProps
)(MyComponentPresentation)

ПоказатьЛюдиПрезентация:

class ShowPeoplePresentation extends React.Component {
  componentDidMount() {
    this.props.getData();
  }
  render() {
    return(
     <>
      <ShowPeople people = {this.props.managers} />
      <ShowPeople people = {this.props.employees} />
     </>
     );
   }
}

Я не думаю, что «getData» вызывает какие-либо побочные эффекты. Можно ли вызывать диспетчеризацию дважды, как это?

В том же духе документы редукса, похоже, добавляют немного логики в «Контейнерный компонент» - см. здесь

Возможный дубликат Куда отправить несколько действий в редуксе?

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

Ответы 1

Ответ принят как подходящий

Вы можете отлично отправлять несколько действий из метода mapDispatchToProps, учитывая, что вы используете redux-thunk.

Однако будет лучше и читабельнее, если вы просто добавите эту логику при создании getData в качестве создателя действий, например

const getData = () => {
   return (dispatch) => {
       dispatch(fetchData('employees'));
       dispatch(fetchData('managers'));
   }
}

и использовать его как

const mapDispatchToProps = dispatch({
   getData: () => {
    dispatch(getData());
   }
});

Вы также можете отправить fetchData и вызвать его из компонента, например

const mapDispatchToProps = dispatch({
   fetchData: (type) => {
    dispatch(fetchData(type));
   }
});

и в компоненте

getData = () => {
   const {fetchData} = this.props;
   fetchData('employees');
   fetchData('managers');
}

В приведенном выше решении вы не зависите от redux-thunk, чтобы разрешить несколько dispatch

Я исхожу из фона MVVM, и наши ViewModels будут загружать все данные при инициализации, и это может быть много данных. Поэтому кажется странным создавать специфичные для компонента методы инициализации в виде универсального модуля создателей действий.

user210757 25.04.2019 20:44

Вы можете просто следовать второму шаблону, который сохраняет специфичную для компонента логику внутри самого компонента.

Shubham Khatri 25.04.2019 20:46

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