存储“全局”对象终极版之外的存储反应,和/终极版应用
问题描述:
我建立一个反应,和/终极版应用程序,需要一个全局对象(LIB的WebSocket实例)。我最初试图将其存储在Redux状态树中,但是,该实例不是不可变的,并且在开发过程中引发了大量热重载问题(从编译代码运行时不存在的大量循环引用错误)。存储“全局”对象终极版之外的存储反应,和/终极版应用
我的问题是如何存储/所以它是提供给我Redux的代码创建这个实例和反应的组分?我可以在组件树的顶部创建它,并将其作为道具传递给树,但在使用react-redux connect完成所有事情后,感觉非常“肮脏”。
有没有更好的方法来做到这一点?
答
终极版咚,通过gaeron创作,他谁终极版创作,因为2.1.0允许你做:
const store = createStore(
reducer,
applyMiddleware(thunk.withExtraArgument(api))
)
// later
function fetchUser(id) {
return (dispatch, getState, api) => {
// you can use api here
}
}
这是直接从文档,请参阅下面的链接了解更多信息:
答
@如果你使用的thunk sheeldotme的答案将工作做好。
还要记住的是,根据LIB你使用WebSocket的,你可能不需要的实例作为一个全局变量。例如,对于socket.io-client
,在最初的io(url)
调用使websocket连接之后,对io(url)
(具有相同url
参数)的任何后续调用将从内存中返回相同的连接(即socket
对象),而无需重新连接。它可以很容易地获得一个API,您可以简单地使用import
/require
,而不必传递该实例或使其成为全局实例。有关更多信息,请参阅socket.io docs。
例如:
socket.js
import io from 'socket.io-client'
const socket = io(`${protocol}//${hostname}:${port}`)
export default socket
现在,你可以简单地import
/require
您socket.js文件具有随时随地轻松访问相同的Socket对象。