当前,我正在使用此设置(为简化可读性):
redux_store('appStore', props: { foo: 'bar' })
<%= redux_store_hydration_data %> (before close of body tag)
<%= react_component('FooBar') %>
ReactOnRails.getStore('appStore');
ReactOnRails.registerStore({ appStore });
如果我检查源,则数据和组件似乎存在:
<div id="FooBar-react-component-fb8d03cb-b3d3-4247-8b4b-3e5a2ad52f84"></div>
<script type="application/json" class="js-react-on-rails-component" data-component-name="FooBar" data-trace="true" data-dom-id="FooBar-react-component-fb8d03cb-b3d3-4247-8b4b-3e5a2ad52f84">{}</script>
<script src="/main.js"></script>
<script type="application/json" data-js-react-on-rails-store="appStore">{"foo":"bar"}</script>
但是,由于这些致命错误,组件本身无法渲染:
Uncaught Error: There are no stores hydrated and you are requesting the store appStore...`
Uncaught Error: Could not find store registered with name 'appStore'. Registered store names include...
据我所知,该设置与文档中概述的内容一致,因此我想知道这是否是某种错误。我试过将调用移至控制器和视图中的redux_store
,将其他调用移至其他文件和位置等均无济于事。
非常感谢您的帮助,在此先感谢您!
答案 0 :(得分:0)
我有完全相同的问题。这就是我解决的方法。最初,我有这个
const appStore = ReactOnRails.getStore("myStore");
const HelloWorldApp = (appStore) => (
<Provider store={appStore}>
<HelloWorldContainer />
</Provider>
);
export default HelloWorldApp;
但是未能在此处注册商店
const appStore = ReactOnRails.getStore("myStore");
所以我将其更改为此
import React from 'react';
import { Provider } from 'react-redux';
import HelloWorldContainer from './HelloWorldContainer';
const HelloWorldApp = (props) => (
<Provider store={ReactOnRails.getStore("myStore")}>
<HelloWorldContainer />
</Provider>
);
export default HelloWorldApp;
“没有商店水合”的东西有点误导。 “水化”商店只是一个填充的对象。当您查看html时,您确实有一个水合的商店,而JS却找不到。我相信通过在此处添加ReactOnRails.getStore
<Provider store={ReactOnRails.getStore("myStore")}>
帮助处理装载顺序。我相信它最初对我不起作用的原因是因为JS加载顺序。我希望这对某人有帮助。