Javascript 无法访问actions/api服务中的redux存储(没有connect()函数)

Javascript 无法访问actions/api服务中的redux存储(没有connect()函数),javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我正在尝试从我的应用程序中的authreducer获取令牌,以便后续请求更多资源 问题是我无法访问组件之外的store.getState()或store。像actions/apiservice 我记得早些时候我制作了一个应用程序,在那里我可以毫无问题地使用它 这里有一个人为的例子:我制作了一个基本的todo应用程序,你可以在actions/index.js中看到,当我console.log(store)时,我没有定义 更新:我更新了示例以强调问题所在,我无法在单独的文件api.js 另一个例子:

我正在尝试从我的应用程序中的
auth
reducer获取令牌,以便后续请求更多资源

问题是我无法访问组件之外的
store.getState()
store
。像
actions/api
service

我记得早些时候我制作了一个应用程序,在那里我可以毫无问题地使用它

这里有一个人为的例子:我制作了一个基本的todo应用程序,你可以在
actions/index.js
中看到,当我
console.log(store)
时,我没有定义

更新:我更新了示例以强调问题所在,我无法在单独的文件
api.js

另一个例子:他们说它是这样工作的,但我无法复制它


是否要修复此问题并访问存储状态?从昨天起我什么都试过了。谢谢。

创建存储时导出存储,然后使用它,例如
存储。分派(操作)或创建特定于api的中间件

有关许多示例,请参见

更新:

store.js:

import { configureStore } from "redux-starter-kit";
import rootReducer from './reducers'

export const store = configureStore({
  reducer: rootReducer,
});
index.js:

import React from 'react'
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import App from './components/App'
import { store } from "./store";

render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
)

克隆了stackblitz并进行了以下更改:

在您的应用程序中,请执行以下操作:

import store from './store';
添加一个包含以下内容的文件:

import { configureStore } from "redux-starter-kit";
import rootReducer from './reducers'


const store = configureStore({
  reducer: rootReducer,
});

export default store;
并将您的更改为:

从“React”导入React
从'react dom'导入{render}
从“react redux”导入{Provider}
从“./components/App”导入应用程序
从“./store”导入存储
渲染(
,
document.getElementById('root'))
)

我仍然会选择在本地存储中保存令牌,如果用户登录并打开另一个选项卡,则用户需要再次登录,因为另一个选项卡无法访问令牌,当用户转到另一个站点,然后返回您的站点时也是如此。

如果您正在使用
redux thunk
并将带有
withExtraArgument()
的api传递给传递给
createStore()
的thunk中间件,那么您可以使用延迟回调函数为api令牌(或任何其他您想要的)注入选择器到包装的API帮助函数

就个人而言,我更喜欢这种方法,因为它将api助手与redux解耦。API助手根本不必知道redux,这样就可以工作。在读取导入时,您只需将选择器注入API帮助器,然后在需要时(在存储初始化很久之后)调用它们

api.js

//函数接受返回
//标准邮政职能
导出常量post=(getHeaders)=>(url,正文)=>{
返回获取(url,{
方法:“POST”,
headers:getHeaders(),
...
}
}
store.js

将*作为api从“/utils/api”导入;
从“./features/auth”导入{selectAuthHeaders}
const store=createStore(
减根剂,
初始状态,
applyMiddleware(
带着额外的论点({
post:api.post(()=>{
返回selectAuthHeaders(store.getState());
}
})
)
)

我猜在您使用之前,您已经获得了getState和dispatch。我正在使用具有redux thunk作为默认中间件的
redux初学者工具包(因此它包括在内):dispatch和getState在您的操作中都可用:
const someAction=(id)=>(dispatch,getState)=>{if(seletItem(getState(id)){return};dispatch(正在加载(id);…}
问题是我正在尝试在API服务中使用它,因此当有人登录时,我存储令牌,我希望我的
API
请求包含该令牌。您可以将令牌从您的操作传递到API函数(在操作中,您拥有getState,并且可以从存储中获取令牌)。或者,当您登录时,将令牌保存到本地存储,这样当用户登录并打开其他选项卡、离开并返回您的站点时,如果令牌未过期,则不会要求用户再次登录。问题是我无法访问
api.js
中的
存储
实例(这是链接中发生的情况)如果我能够访问导出的
存储
,这将解决问题。如果你看我的示例,我正在导出存储。:)啊哈,我明白了,更新了。你的导入/导出有点混乱。最好将存储初始化移到单独的模块,以消除依赖冲突,请参见示例,存储记录到控制台。
import { configureStore } from "redux-starter-kit";
import rootReducer from './reducers'


const store = configureStore({
  reducer: rootReducer,
});

export default store;
import React from 'react'
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import App from './components/App'
import store from './store'


render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
)