Pet*_* G. 31 javascript reactjs react-native redux react-redux
将多个文件的内容合并为一个以作为Redux的配置后,我遇到了错误配置的Redux的问题.
如何解决store
,同时将其保存在一个文件中?
未处理的JS异常:无法在"Connect(App)"的上下文或道具中找到"store".将根组件包装在a中,或者将"store"显式传递为"Connect(App)"的prop.
'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);
Run Code Online (Sandbox Code Playgroud)
Pin*_*eda 24
Provider,将商店传递给嵌套在其中的组件,通常只需要应用于根组件(在您的情况下)<RootContainer>
connect
连接提供商店的组件,而不是提供商店的组件.
MOVE将connect
到<RootContainer>
组件文件代替,并通过connect
了RootContainer并没有在App组件:
export default connect(
(state) => ({
state: state.reducer
}),
(dispatch) => ({
actions: bindActionCreators(screenActions, dispatch)
})
)(RootContainer); // <<--- here :)
Run Code Online (Sandbox Code Playgroud)
鉴于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>
);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
34039 次 |
最近记录: |