2017-02-22 39 views
1

Я создаю приложение для принятия решений & и имею следующую проблему: в одном из моих компонентов я хотел бы программно перейти на другую страницу и отобразить модальный.push-router-redux push несовместим с действиями, связанными с редукцией?

Я обнаружил, что выполнение этого в двух операциях не очень хорошо работает в моем приложении из-за того, что состояние обновляется дважды (из-за того, что мой модальный визуализируется дважды, что приводит к его исчезновению).

Итак, я пытаюсь обновить состояние после использования сокращенных пакетов-действий, вызывая batchActions с двумя функциями (типа «push» и «openModal»). Но по какой-то причине вызов «push» внутри batchActions не работает. Пример:

import { push } from 'react-router-redux'; 
import { batchActions } from 'redux-batched-actions'; 

myFunction: function() { 
    this.props.newPath("/mypath"); 
} 

const mapDispatchToProps = (dispatch) => { 
    return { 
     newPath: (path) => dispatch(batchActions([push(path)])), 
    } 
} 

Диспетчерская операцию нажимной сама по себе работает отлично, как это:

newPath: (path) => dispatch(push(path)) 

И, диспетчирование действие модально в batchAction работы:

newPath: (path) => dispatch(batchActions([displayModal("title", "message"])) 

Так что похоже batchActions по какой-то причине не признает действие «толчка», и я не могу понять, почему.

Может ли кто-нибудь понять, почему batchActions не будет правильно обрабатывать действие «push»?

Привет

ответ

0

pushreact-router-redux действия обрабатываются routerMiddleware. routerMiddleware ищет только конкретные действия маршрутизатора в зависимости от их типа. redux-batched-actions, с другой стороны, обертывает два или более действия в одном составном действии со специальным типом redux-batched-actions. Поэтому routerMiddleware не идентифицирует это действие как действие маршрутизатора при его прохождении через промежуточное программное обеспечение, и никаких изменений маршрута не происходит.

Существует проблема, описывающая проблему в https://github.com/ReactTraining/react-router/issues/5227.

Решения:

Там находится еще один пакет, который вы можете использовать с react-redux-router для пакетных действий: react-batch-enhancer. Он работает на уровне промежуточного программного обеспечения, поэтому базовые пакетные действия будут обрабатываться соответствующими посредниками.