2016-10-12 49 views
6

我得到這個錯誤:陣營+終極版: 「<Provider>不支持更改'對飛store`」

<Provider> does not support changing store on the fly. It is most likely that you see this error because you updated to Redux 2.x and React Redux 2.x which no longer hot reload reducers automatically. See https://github.com/reactjs/react-redux/releases/tag/v2.0.0 for the migration instructions.

我有這樣一個組成部分:

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文件:

import { combineReducers } from 'redux'; 

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

我的包:

{ 
    "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" 
    } 
} 

我甚至沒有做任何幻想,所以我不明白爲什麼會有這個錯誤。誰能幫忙?

回答

12

如果你深入到做出反應,終極版的代碼有點你看這

if (store !== nextStore) { 
    warnAboutReceivingStore() 
} 

所以它似乎所有你需要做的就是外移動createStore電話。

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> 
    ) 
    } 

沒有測試過,但應該工作。

+1

Dan Abramov在[GitHub issue](https://github.com/reactjs/react-redux/issues/259)中解釋了這一點。 – totymedli

0

我得到了同樣的錯誤,解決方法是刪除DevTools。

<Provider store={store} > 
    <App /> 
</Provider> 

在組件應用程序的渲染()方法,有:

<DevTools /> 

後我除去DevTools,誤差消失。

這不是一個好的解決方案,僅供參考。