在Util文件中访问Redux Store

use*_*352 7 reactjs redux react-redux

TLDR:我希望能够在外部"Util"文件中获取最新的Redux状态.我怎样才能做到这一点?


假设我有播放列表..在应用的许多不同区域,您可以"开始"播放列表.所以在"Util"文件中我有"startPlaylist"函数,所以我不必在很多地方编写函数,只在一个地方编写.

这个问题是,如果我在播放列表运行时对播放列表进行任何更改,"playNextPageInPlaylist"函数将不会收到播放列表的任何更新.

我可以做什么和更改,以便我在Util文件中的功能将获得最新的Redux状态?

我在7个不同地区startPlaylist功能,它涉及到的功能(全部在文件的Util)是相当复杂..它是没有意义的复制和粘贴,在所有7个文件.

谢谢你的帮助


React.Component文件1

import { startPlaylist } from '../util/EntitiesUtil';

start1() {   
  startPlaylist( store.playlists[0] ); 
}
Run Code Online (Sandbox Code Playgroud)

React.Component文件2

import { startPlaylist } from '../util/EntitiesUtil';

start2() {
  startPlaylist( store.playlists[0] );
}
Run Code Online (Sandbox Code Playgroud)

EntitiesUtil.js

export function startPlaylist( playlistFromStore ) {
  // do stuff
  playNextPageInPlaylist( playlistFromStore );  // keeps grabbing next page on a timer
}
Run Code Online (Sandbox Code Playgroud)

Sag*_*b.g 8

你有几个选择,我看到的主要选择是:

  1. 将商店传递给函数(呸,请不要那样做!)。
  2. 您可以编写自己的中间件来处理某些操作类型,并在需要时可以调度其他操作(您还可以免费访问整个商店!)。

我认为第二个选项是理想的,因为您希望您util做的东西反映在商店中或需要商店中的东西。所以基本上你util想成为redux流程的一部分!
嗯,这不是一个,component所以你不能“连接”它,但它可以(并且在我看来应该是)位于你的操作和减速器之间的广告中间件。

您可以在此处阅读有关中间件的信息
我会为您提供一个用例示例,但您没有发布任何有意义的代码。

编辑
您的评论的后续行动:

它非常基本。

  1. 您有一个永远不会改变的函数的签名,只需查看文档(它使用 currying,这是js您应该学习的另一个主题)
  2. 您需要在创建它时将其注入商店 applymiddleware(与您所做的一样,redux-thunk它本身就是一个中间件)。

我真的建议看一下redux-thunk 它整个 11 行的源代码。
你可以从中学到很多东西。