我第一次与react-admin合作。我有一个自定义的React应用程序,想在其中使用react-admin。在tutorial之后,我发现我可能不需要执行任何操作,因为我正在使用<Admin>
组件,并且admin应该检测到它在redux应用程序中并将其状态挂载在商店。似乎正在创建初始状态。但是它永远不会更新。我也没有看到与react-admin相关的动作,例如redux开发工具中的RA/REGISTER_RESOURCE
。
我的默认createStore.js
是(来自react-boilerplate)
import { createStore, applyMiddleware, compose } from 'redux';
import { routerMiddleware } from 'connected-react-router';
import createSagaMiddleware from 'redux-saga';
import createReducer from './reducers';
export default function configureStore(initialState = {}, history) {
let composeEnhancers = compose;
const reduxSagaMonitorOptions = {};
if (process.env.NODE_ENV !== 'production' && typeof window === 'object') {
if (window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__)
composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
trace: true,
traceLimit: 25,
});
}
const sagaMiddleware = createSagaMiddleware(reduxSagaMonitorOptions);
const middlewares = [sagaMiddleware, routerMiddleware(history)];
const enhancers = [applyMiddleware(...middlewares)];
const store = createStore(
createReducer(),
initialState,
composeEnhancers(...enhancers),
);
store.runSaga = sagaMiddleware.run;
store.injectedReducers = {}; // Reducer registry
store.injectedSagas = {}; // Saga registry
// Make reducers hot reloadable, see http://mxs.is/googmo
/* istanbul ignore next */
if (module.hot) {
module.hot.accept('./reducers', () => {
store.replaceReducer(createReducer(store.injectedReducers));
});
}
return store;
}
我也尝试过
import { routerMiddleware } from 'connected-react-router';
import createSagaMiddleware from 'redux-saga';
import { all, fork } from 'redux-saga/effects';
import createReducer from './reducers';
import { adminSaga, USER_LOGOUT } from 'react-admin';
export default ({ authProvider, dataProvider, history }) => {
const reducer = createReducer();
const resettableAppReducer = (state, action) =>
reducer(action.type !== USER_LOGOUT ? state : undefined, action);
const saga = function* rootSaga() {
yield all([adminSaga(dataProvider, authProvider)].map(fork));
};
const sagaMiddleware = createSagaMiddleware();
const composeEnhancers =
(process.env.NODE_ENV === 'development' &&
typeof window !== 'undefined' &&
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ &&
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
trace: true,
traceLimit: 25,
})) ||
compose;
const store = createStore(
resettableAppReducer,
{},
composeEnhancers(
applyMiddleware(sagaMiddleware, routerMiddleware(history)),
),
);
sagaMiddleware.run(saga);
store.runSaga = sagaMiddleware.run;
store.injectedReducers = {}; // Reducer registry
store.injectedSagas = {}; // Saga registry
if (module.hot) {
module.hot.accept('./reducers', () => {
store.replaceReducer(createReducer(store.injectedReducers));
});
}
return store;
};
其中reducers.js在哪里
/**
* Combine all reducers in this file and export the combined reducers.
*/
import { combineReducers } from 'redux';
import { connectRouter } from 'connected-react-router';
import { reducer as formReducer } from 'redux-form';
import history from 'utils/history';
import languageProviderReducer from 'containers/LanguageProvider/reducer';
import profilePageReducer from 'containers/ProfilePage/reducer';
import { adminReducer } from 'react-admin';
export default function createReducer(injectedReducers = {}) {
const rootReducer = combineReducers({
form: formReducer,
language: languageProviderReducer,
profilePage: profilePageReducer,
admin: adminReducer,
...injectedReducers,
});
const mergeWithRouterState = connectRouter(history);
return mergeWithRouterState(rootReducer);
}
我已经尝试了很多,但似乎无法发现问题。任何帮助将不胜感激。
商店很好。一切正常。由于this错误,扩展程序中未显示操作。最终浪费了很多时间。
编辑:并非一切都很好。 RA未检测到我的商店,因此创建了自己的商店。 redux dev tools扩展正在显示其他商店,因此未显示RA的操作。