после некоторой регистрации консоли во всем приложении, я наконец-то знаю причину, по которой это mapStateToProps имеет значение в этом случае.Таким образом, похоже, что сценарий был таким:
с mapStateToProps:
маршрутизация токена загрузки -> диспетчерский токен для сохранения и начала загрузки дома -> home componentDidMount
сработал, но токенвсе еще ноль, потому что отправка не выполнена -> как только отправка выполнена, маршруты перемонтированы, потому что подписка на mapStateToProps, которая обновляется с отправкой -> home, была перезагружена, на этот раз токен
без:
направляет токен загрузки -> токен отправки для сохранения и запуска загрузки дома -> home componentDidMount
сработал, но токен все еще нулевой, поскольку отправка не выполнена -> после завершения отправки, маршруты НЕ переустанавливаются, потому что он не подписывается на mapStateToProps, который обновляется с отправкой -> home не перезагружается
Так что, похоже, мое приложение работало, но по совершенно неправильной причине !!
Итак, после того, как я удалил mapStateToProps
, чтобы сделать мое приложение логически здоровым, оно сводится к этим двум последовательным строкам из фрагмента в моей question:
this.setState({ isReady: true, isLoggedIn: true });
store.dispatch({ type: t.LOGGED_IN, token: data });
Эти две строки в гонке , и последовательность была отключена для начала, я должен был сначала dispatched
затем установить состояние в isReady:true
, чтобыимеет больше смысла, чем приведенный выше фрагмент, потому что как я могу сказать «эй, вы можете закрыть экран-заставку и начать загрузку домой», когда я даже не отправил токен в магазин!
НО даже после этого эти 2линии по-прежнему участвуют в гонке, потому что они обе являются асинхронными операциями, так что теперь моя единственная проблема - как решить эту race condition
, что гораздо проще понять!: D