首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React + Redux:"<Provider>不支持动态更改` `store`‘“

React + Redux:"<Provider>不支持动态更改` `store`‘“
EN

Stack Overflow用户
提问于 2016-10-12 22:06:13
回答 2查看 4.1K关注 0票数 8

我得到了一个错误:

<Provider>不支持动态更改store。您很可能会看到此错误,因为您更新到Redux2.x并响应Redux2.x,不再自动重新加载热减速器。有关迁移说明,请参见https://github.com/reactjs/react-redux/releases/tag/v2.0.0

我有一个组件:

代码语言:javascript
复制
import React, { Component } from 'react';
import {
  AppRegistry,
  NativeAppEventEmitter
} from 'react-native';
import { Provider } from 'react-redux';
import { createStore } from 'redux';
import reducers from './src/reducers';
import Onboarding from "./src/onboarding/Onboarding";
import Home from "./src/home/Home";
import codePush from 'react-native-code-push';

class Edmund extends Component {

  ...

  startScreen() {
    if (this.state.screen === "HOME" ) {
      return (<Home />);
    }

    return (
      <Onboarding />
    );
  }

  render() {
    return (
      <Provider store={ createStore(reducers) }>
        { this.startScreen() }
      </Provider>
    )
  }

AppRegistry.registerComponent('Edmund', () => Edmund)

我的src/reducers/index.js文件:

代码语言:javascript
复制
import { combineReducers } from 'redux';

export default combineReducers({
  libraries: () => []
});

我的包裹:

代码语言:javascript
复制
{
  "name": "Indigo",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start"
  },
  "dependencies": {
    "lodash": "^4.13.1",
    "react": "^15.2.0",
    "react-native": "^0.27.1",
    "react-native-apple-pay": "0.0.0",
    "react-native-code-push": "^1.11.0-beta",
    "react-native-loading-spinner-overlay": "^0.3.0",
    "react-native-navigation": "^1.0.2",
    "react-native-paged-scroll-view": "^2.0.1",
    "react-native-progress": "^3.0.1",
    "react-redux": "latest",
    "redux": "^3.0.0",
    "underscore": "^1.8.3"
  },
  "devDependencies": {
    "eslint": "latest",
    "eslint-config-airbnb": "latest",
    "eslint-plugin-import": "^1.16.0",
    "eslint-plugin-jsx-a11y": "latest",
    "eslint-plugin-react": "latest"
  }
}

我甚至没有做任何花哨的事情,所以我不明白为什么会有这个错误。有人能帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-12 23:50:29

如果您深入了解代码,就会看到以下内容

代码语言:javascript
复制
if (store !== nextStore) {
  warnAboutReceivingStore()
}

因此,似乎您所要做的就是将createStore调用移到外边。

代码语言:javascript
复制
store = createStore(reducers)


class Edmund extends Component {

  ...

  startScreen() {
    if (this.state.screen === "HOME" ) {
      return (<Home />);
    }

    return (
      <Onboarding />
    );
  }

  render() {
    return (
      <Provider store={ store }>
        { this.startScreen() }
      </Provider>
    )
  }

还没有测试过,但应该能用。

票数 16
EN

Stack Overflow用户

发布于 2017-01-06 04:47:01

我得到了同样的错误,解决方法是删除DevTools。

代码语言:javascript
复制
<Provider store={store} >
   <App />
</Provider>

在component的呈现()方法中,有一个:

代码语言:javascript
复制
<DevTools />

删除DevTools后,错误消失了。

这不是一个好的解决办法,只是供你参考。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40009159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档