【发布时间】:2018-03-15 12:37:04
【问题描述】:
更新 2 - 添加显示问题的最小“工作”示例
我在仍然显示问题的同时尽可能地缩减了项目,以便人们在感兴趣的情况下尝试想法/调试 github:store_import_test
错误发生在:request.js
注意:我知道赏金即将到期,但如果发生这种情况,我会重新启用它。我非常感谢到目前为止提出的所有想法/帮助!
结束更新 2
更新 1 - 用途说明:
我想在“实用程序功能”中访问商店中的一个值(可以改变超时)。根据redux docssubscribe是一个有效的选项。
结束更新
我正在尝试将我的 redux-store 导入组件之外(在 request.js 中,见下文),类似于:What is the best way to access redux store outside a react component?
但是,所有这些解决方案(包括https://github.com/reactjs/redux/issues/776)都不起作用,因为我的request.js 尝试在createStore() 在store.js 中调用之前导入商店,导致store 成为undefined。
我的目录结构是这样的
.
├── app
│ ├── api
│ ├── network
│ | └── request.js
│ ├── app.js
│ ├── store.js
├── index.android.js
├── index.ios.js
index.android/ios.js 是入口点,只需加载 app.js
index.android/ios.js
import App from './app/app'
app.js
import store from './store'
class App extends React.Component {
render() {
return (
<Provider store={store}>
<RootStackNavigation />
</Provider>
)
}
}
store.js
...
const store = createStore(reducer, initialState, middleware())
export default store
request.js
import store from '../../store'
store.subscribe(listener)
...
const someFunc(){}
export default someFunc
我的想法/我的尝试/我迷路的地方
注意:request.js 中的store 导入路径有效,请仔细检查
注意2:store 可用于app.js 和程序的其余部分
我认为request.js 中的import store from '../../store' 会触发const store = createStore(reducer, initialState, middleware()) 行,但显然它似乎确实如此。
尝试 1
我也尝试这样导出商店:
export const store = createStore(reducer, initialState, middleware())
并将其导入request.js 为:
import {store} from '../../store
认为“聪明”的默认加载可能会产生一些我不知道/不理解的魔力。同样的错误,未定义
尝试 2 将 getStore() 添加到 store.js
let store = null
store = createStore(reducer, initialState, middleware())
export function getStore() {
if (store == null) {
store = createStore(reducer, initialState, middleware())
}
return store
}
export default store
不起作用,createStore 的参数尚未初始化。
我一定是误解了加载过程或将其与 python 的加载过程混合在一起,但是是什么阻止了它的工作?其他人似乎成功地使用了相同的解决方案(参见上面提到的帖子)。
【问题讨论】:
-
我认为您正在尝试使用 react 的状态(使用 Redux 管理)而不使用 react,这不会发生。您是否考虑将请求作为中间件放入应用程序?
-
如果您查看我链接的 SO,您会看到人们成功地按照我的要求进行操作。例如这个解决方案stackoverflow.com/a/38480550/3869515 我基本上是在尝试做与那个解决方案相同的事情。鉴于他们的成功,我认为这应该是可能的
-
在您的示例中,缺少侦听器功能,我猜您忘记粘贴了?
-
我省略了那部分,因为我试图在不丢失太多信息的情况下尽可能地减少它。我通过在两者之间添加“...”来澄清它。错误消息类似于“can't call subscribe on undefined”,调试时显示
store未定义。 -
您能否在
request.js中提供有关listener的反馈?
标签: javascript react-native redux