Правильно ли, что в redux combReducers все редукторы называются? - PullRequest
1 голос
/ 04 марта 2020

У меня есть 2 редуктора (количество и поиск), которые я объединил. Когда компонент поиска отправляет оба редуктора, вызываются.

  1. Это ожидаемое поведение, которое называется все редукторы?
  2. Или следует вызывать только самый конкретный c редуктор (т. Е. Поиск)? Что я должен сделать, чтобы получить только самый конкретный c редуктор для вызова?

Вот поиск, подсчет и комбинированные редукторы

const initialState = {url:'...'};
function search(state = initialState, action) {
  if (action.type === 'SEARCH') {
    ...
    return state;
  }
  return state;
}
export default search;

.

const initialState = 0;
function count(state = initialState, action) {
  if (action.type === 'INCREMENT') {
    return state + 1;
  }
  if (action.type === 'DECREMENT') {
    return state - 1;
  }
  return state;
}
export default count;

.

import CountReducer from './CountReducer.js';
import SearchReducer from './ApiReducer.js';
import { combineReducers } from 'redux'

const reduce = combineReducers({
  count: CountReducer,
  search: SearchReducer
});
export default reduce;

Компонент поиска выглядит следующим образом

import React, { Component } from 'react';
import { onSearch as onSearchAction } from '../store/actions/Actions.js';
import { connect } from 'react-redux';

class Search extends Component {
  render() {
    return (
      <>
      ....
      </>
    );
  }
}

const mapStateToProps = (state) => {
  return { url: state.url };
}

const mapDispatchToProps = (dispatch, ownProps) => {
  return { onSearch: () => dispatch(onSearchAction()) };
};

const ConnectedSearch = connect(mapStateToProps, mapDispatchToProps)(Search);

export default ConnectedSearch;

А вот поисковое действие

export function onSearch() {
  return {
    type: "SEARCH",
    url: '...'
  }
}

1 Ответ

2 голосов
/ 04 марта 2020

Это ожидаемое поведение, что все редукторы называются?

Да.

Что я должен сделать, чтобы получить только самый специфичный c редуктор быть вызванным?

Ну, вы можете написать собственный редуктор, чтобы сделать это, но я не уверен, в чем выгода. Предположительно, вы бы написали код, который говорит: «если это действие, или это действие, или это действие, то вызовите редуктор 1; в противном случае вызовите редуктор 2». Но проверка типов действий - это то, что редуктор 1 уже делает , поэтому вы просто дублируете логи c. Почему бы просто не вызвать оба редуктора и позволить им обрабатывать или игнорировать то, что им небезразлично или не важно?

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