I am developing a Kibana Plugin. I have got an error like this
Uncaught Error: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
- You might have mismatching versions of React and the renderer (such as React DOM)
- You might be breaking the Rules of Hooks
- You might have more than one copy of React in the same app
See https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.
at resolveDispatcher (react.development.js:1590)
at useMemo (react.development.js:1642)
at Provider (Provider.js:22)
at renderWithHooks (react-dom.development.js:12839)
at mountIndeterminateComponent (react-dom.development.js:14814)
at beginWork (react-dom.development.js:15419)
at performUnitOfWork (react-dom.development.js:19106)
at workLoop (react-dom.development.js:19146)
at HTMLUnknownElement.callCallback (react-dom.development.js:149)
at Object.invokeGuardedCallbackDev (react-dom.development.js:199)
react-dom.development.js:16911 The above error occurred in the component:
in Provider
in PseudoLocaleWrapper (created by I18nProvider)
in IntlProvider (created by I18nProvider)
in I18nProvider
Consider adding an error boundary to your tree to customize error handling behavior.
Visit https://fb.me/react-error-boundaries to learn more about error boundaries.
after I set up my custom router and store with connected-react-router package for my plugin
import React from 'react';
import { uiModules } from 'ui/modules';
import chrome from 'ui/chrome';
import { render, unmountComponentAtNode } from 'react-dom';
import { I18nProvider } from '@kbn/i18n/react';
import { ConnectedRouter } from 'connected-react-router';
import configureStore ,{history} from './store/store';
import { Provider } from 'react-redux';
import 'ui/autoload/styles';
import Main from './components/main/main';
const app = uiModules.get('apps/wmdcUserDashboard');
const store = configureStore();
app.config($locationProvider => {
$locationProvider.html5Mode({
enabled: false,
requireBase: false,
rewriteLinks: false,
});
});
app.config(stateManagementConfigProvider =>
stateManagementConfigProvider.disable(),
);
function RootController($scope, $element, $http) {
const domNode = $element[0];
// render react to DOM with Dom Node aka Root Node
render(
<I18nProvider>
<Provider store={store}>
<ConnectedRouter history={history}>
<Main/>
</ConnectedRouter>
</Provider>
</I18nProvider>,
domNode,
);
$scope.$on('$destroy', () => {
unmountComponentAtNode(domNode);
});
}
chrome.setRootController('wmdcUserDashboard', RootController);
It seems like I have more than one react package in my app.
Should I install npm packages in the plugin directory ? Or should I install it in the Kibana directory?
If anyone has any suggestions about routing in the custom plugin , please suggest me best approaches . Thank you.