当前位置: 首页 > 面试题库 >

在“ Connect(App)”的上下文或道具中找不到“商店”

鲁建茗
2023-03-14
问题内容

将多个文件的内容合并到一个文件中以作为Redux的配置后,Redux的配置出现问题。

如何解决store,同时将其保存在一个文件中?

未处理的JS异常:在“ Connect(App)”的上下文或道具中找不到“商店”。可以将根组件包装在中,也可以将“存储”作为道具明确传递给“
Connect(App)”。

'use strict';
import React, { Component } from 'react';
import { createStore, applyMiddleware, combineReducers, bindActionCreators } from 'redux';
import { Provider, connect } from 'react-redux';
import thunk from 'redux-thunk';
import * as screenActions from './redux/actions/screenActions';

import * as reducers from './redux/stores/reducers';

const createStoreWithMiddleware = applyMiddleware(thunk)(createStore);
const reducer = combineReducers(reducers);
const store = createStoreWithMiddleware(reducer);

import RootContainer from './redux/views/containers/rootContainer';

class App extends Component {
  render() {
    const { state, actions } = this.props;
    return (
      <Provider store={store}>
        <RootContainer />
      </Provider>
    );
  }
}

export default connect(
  (state) => ({
    state: state.reducer
  }),
  (dispatch) => ({
    actions: bindActionCreators(screenActions, dispatch)
  })
)(App);

问题答案:
  • 提供程序, 将商店传递 给嵌套在其中的组件,通常只需要将其应用于 组件(在您的情况下)<RootContainer>

  • connect与提供存储的组件连接, 而不 与提供存储的组件连接。

建议的解决方案:

MOVEconnect
<RootContainer>组件文件代替,并通过connect了RootContainer并 没有 在App组件:

export default connect(
  (state) => ({
    state: state.reducer
  }),
  (dispatch) => ({
    actions: bindActionCreators(screenActions, dispatch)
  })
)(RootContainer);  // <<--- here :)

更新:

鉴于OP希望在同一个文件中实现所有这些目标,因此您必须创建一个React元素,该元素代表通过connect创建的Redux容器,因此:

'use strict';
import React, { Component } from 'react';
import { createStore, applyMiddleware, combineReducers, bindActionCreators } from 'redux';
import { Provider, connect } from 'react-redux';
import thunk from 'redux-thunk';
import * as screenActions from './redux/actions/screenActions';

import * as reducers from './redux/stores/reducers';

const createStoreWithMiddleware = applyMiddleware(thunk)(createStore);
const reducer = combineReducers(reducers);
const store = createStoreWithMiddleware(reducer);

import RootContainer from './redux/views/containers/rootContainer';

// name has to be capitalised for React to recognise it as an element in JSX
const ConnectedRoot = connect(
  (state) => ({
    state: state.reducer
  }),
  (dispatch) => ({
    actions: bindActionCreators(screenActions, dispatch)
  })
)(RootContainer);

class App extends Component {
  render() {
    const { state, actions } = this.props;
    return (
      <Provider store={store}>
        <ConnectedRoot />    <------USE IT HERE
      </Provider>
    );
  }
}


 类似资料:
  • 问题内容: 我处理这个问题已有一段时间了,研究了我可以找到的所有相关问题,例如:这个,这个和这个。您能帮我解决这个错误吗?这是logcat抛出的唯一一个。 相关代码: radio.java activity_radio.xml 问题答案: 定义在您需要定义它特定视图方式在这里你不能在该方法两个参数。 您的错误还表示 无法找到方法playPauseMusic(View) 意味着编译器需要 带有单个参

  • 我已经处理这个问题有一段时间了,并查看了我能找到的所有相关问题,例如:这个问题,这个问题和这个问题。你能帮我纠正这个错误吗?这是唯一一个被圆木扔出去的。 相关代码: radio.java 无线电活动。xml

  • 问题内容: 我有以下代码: 我正在尝试在命令行“ $ ant build”上使用ant对其进行编译,但我不断收到以下错误: 有什么建议吗?谢谢! 问题答案: 简短答案:添加此

  • 在单元测试时,我得到了以下错误- 在对Run Configuration进行了一些调查之后,我们发现它在运行这个单元时使用了错误的模块(main.java.com.example.dexter.sunshine.app)。我们如何改变这个模块?

  • 问题内容: 我试图找出为什么我的Web应用程序抛出一个 当我从中复制配置的一个姐妹悄悄地运行时。 我有: 通过右键单击并选择“新的持久性”从netbeans创建一个新的持久性,我不在乎我提供的实际值,但只需要在正确的目录中创建persistence.xml文件即可。 如下编辑我的context.xml,以匹配工作姐妹项目中的那个 编辑了我的web.xml以包含资源DataSource,如下所示 如

  • 问题内容: 我有一个带有applicationContext.xml和dispatcher-servlet.xml配置的Spring Web应用程序。我已经在applicationContext.xml中定义了,但是当我运行我的应用程序时,除非同时添加到dispatcher-servlet.xml中,否则找不到控制器。我在两个中都使用了相同的基本软件包,所以这不是问题。 我很困惑,因为我认为 ap