gpt4 book ai didi

reactjs - 容器组件找不到 Store

转载 作者:行者123 更新时间:2023-12-03 13:27:09 25 4
gpt4 key购买 nike

我遇到了这个错误:Invariant Violation: Could not find "store" in either the context or props of "Connect(Filters)". Either wrap the root component in a <Provider>, or explicitly pass "store" as a prop to "Connect(Filters)".

应用程序的根目录如下所示:

import { AppContainer } from 'react-hot-loader';
import React from 'react';
import { render } from 'react-dom';
import { Provider } from 'react-redux';
import Root from './Root';
import configureStore from './store/configure-store';

const props = Object.assign({}, JSON.parse(document.getElementById('initial-json').innerHTML));
const reduxProps = { filters: props.filters };
const store = configureStore(reduxProps);

render(
<Provider store={store}>
<AppContainer>
<Root {...props} />
</AppContainer>
</Provider>,
reactRoot
);

根组件

export default Root extends Component {

render() {
return(
<div className="someClass">
<Filters />
<Body />
</div>
)
}
}

Filters像这样被挂接到 Redux 中:

过滤器

class Filters extends Component {} ...

const mapStateToProps = (props) => {
return props;
};

export default connect(mapStateToProps)(Filters);
// have also tried: connect()(Filters);

起初,我认为这可能只是组件连接到 Redux 存储时出现的错误,但是我在 Root 内嵌套的几个不同组件上尝试过此操作。包括Root本身。我也尝试过仅包装 FiltersProvider但这引入了 RHL 重新加载存储的问题。

最后,我开始怀疑这与商店的配置方式有关。所以我正在查看configure-store :

configure-store.js

import { createStore, applyMiddleware, compose } from 'redux';
import createSagaMiddleware from 'redux-saga';
import logger from 'redux-logger';
import rootReducer from '../reducers';
import rootSaga from '../sagas';

const sagaMiddleware = createSagaMiddleware();
const enhancer = compose(applyMiddleware(sagaMiddleware, logger));

export default function configureStore(initialState) {
const store = createStore(rootReducer, initialState, enhancer);
sagaMiddleware.run(rootSaga);

if (module.hot) {
/* eslint-disable */
module.hot.accept('../reducers', () =>
store.replaceReducer(require('../reducers').default)
);
}

return store;
}

到目前为止我的问题是:我配置商店的方式是否有问题,或者是否有其他我在这里没有看到的东西?谢谢。

编辑:

redux 存储应该可以通过 this.context.store 从根组件访问。从根组件记录时,this.context返回一个空对象...

store的屏幕截图在传递给提供商之前。

enter image description here

最佳答案

为什么要使用传递给它的 jsx 来调用渲染?在 React 组件中,我们应该定义渲染方法。类似的东西

render() {
return (
<div className="someClass">
<Filters />
<Body />
</div>
)
}

这使我们能够利用组件 this.props 和 this.state 并得出我们如何根据这些值生成内容。

小心不要与reactDom.render混淆。

关于reactjs - 容器组件找不到 Store,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49639476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com