如何将 redux-saga 添加到我的 Web 扩展中?
Posted
技术标签:
【中文标题】如何将 redux-saga 添加到我的 Web 扩展中?【英文标题】:How can I add redux-saga to my web extension? 【发布时间】:2022-01-16 20:40:51 【问题描述】:我正在开发一个创建 google chrome 扩展程序的项目。我正在尝试添加 redux-saga 中间件以使用 saga debounce。但是,我收到一条错误消息:参数类型不可分配为“Store”类型。我该如何解决这个问题,我应该怎么做?互联网上没有各种使用中间件进行 Web 扩展的例子。谢谢你的时间。这是我的代码:
在后台.ts中
const middleware = [saga]
const store = createStore(reducer, initialState)
// a normal Redux store
const storeWithMiddleware = applyMiddleware(store, ...middleware)
wrapStore(storeWithMiddleware, portName: 'bla' )
在 popup.tsx 中
const store = new Store( portName: 'bla' )
// wait for the store to connect to the background page
store
.ready()
.then(() =>
// The store implements the same interface as Redux's store
// so you can use tools like `react-redux` no problem!
const root = document.createElement('div')
document.body.appendChild(root)
ReactDOM.render(
<Provider store=store>
<App />
</Provider>,
root
)
)
.catch((e) => console.log(e))
//);
export default store
【问题讨论】:
【参考方案1】:applyMiddleware
应该只包含中间件(而不是存储)并作为参数传递给 createStore 函数:
const middleware = [saga]
const store = createStore(reducer, initialState, applyMiddleware(...middleware))
const storeWithMiddleware = wrapStore(store, portName: 'bla' )
编辑:
由于您使用的是 webext-redux,看来您实际上是在将两种创建商店的方式混合在一起。仅当您也直接使用来自 webext-redux 的代理存储时,您才应该使用来自 webext-redux 的 applyMiddleware
。由于您使用的是createStore
form redux 包,因此您还应该从redux store 中导入applyMiddleware
函数。
import createStore, applyMiddleware from 'redux'
...
【讨论】:
我试过但现在错误改变了。 '''Store 类型的参数不可分配给 StoreEnhancerredux
包导入的吗?你用的是什么版本的 redux?
我从 'webext-redux' 导入它
哦,这是一个重要的信息。我会在上面更新我的答案。
我从 redux 获得 applyMiddleware 并使用 createSagaMiddleware 创建中间件。现在没有错误。我希望我能:)以上是关于如何将 redux-saga 添加到我的 Web 扩展中?的主要内容,如果未能解决你的问题,请参考以下文章
如何将Excel Web Access Web部件添加到我的sharepoint库中?
如何将 javascripts 添加到我的 InDesign Server Java Web 应用程序?
react-hot-loader 与外部 configureStore 使用 redux-saga 抛出“regeneratorRuntime 未定义”
将异步操作分派到 redux-saga 后如何捕获 redux 存储中的更改
我可以将 Silverlight 2.0 项目添加到我的 Web 应用程序并仍然以 .NET Framework 2.0 为目标吗?