react-admin:如果将 react-admin 嵌入到非 redux 应用程序中,是否需要将 redux 安装到应用程序中?

react-admin: Do you need to install redux to your application if you are embedding react-admin inside a non-redux app?

为 react-admin 实现自定义布局后出现以下错误:

Violation: Could not find "store" in the context of "Connect(CustomMenu)". Either wrap the root component in a <Provider>, or pass a custom React context provider to <Provider> and the corresponding React context consumer to Connect(CustomMenu) in connect options.

这是我在我的应用程序中嵌入的内容:

 import React, {Component} from "react"
 import {Admin, Resource} from "react-admin"
 import buildGraphQLProvider from "ra-data-graphql-simple"
 import Dashboard from "./course-dashboard.js"
 import {PostsList} from "../components/posts"
 import {withStyles} from "@material-ui/core/styles"
 import customRoutes from "../components/custom-routes.js"
 import customLayout from "../components/custom-layout.js"
 import {styles} from "../styles.js"

 class App extends Component {
   constructor() {
     super()
     this.state = {dataProvider: null}
   }

   componentDidMount() {
     buildGraphQLProvider({
       clientOptions: {
         uri: http://localhost/graphql"
       }
     }).then(dataProvider => this.setState({dataProvider}))
   }

   render() {
     const {dataProvider} = this.state

     if (!dataProvider) {
       return <div>Loading</div>
     }

     return (
       <Admin
         appLayout={customLayout}
         customRoutes={customRoutes}
         dashboard={Dashboard}
         dataProvider={dataProvider}>
         <Resource name="Post" list={PostsList} />
       </Admin>
     )
   }
 }

 export default withStyles(styles)(App)

自定义布局

 import React from "react"
 import {Layout} from "react-admin"
 import CustomSidebar from "./custom-sidebar"
 import CustomMenu from "./custom-menu.js"

 const MyLayout = props => (
   <Layout
     {...props}
     sidebar={CustomSidebar}
     menu={CustomMenu}
   />
 )

 export default MyLayout

自定义菜单。此页面产生错误。

 import React from "react"
 import {connect} from "react-redux"
 import {MenuItemLink, getResources, Responsive} from "react-admin"
 import {withRouter} from "react-router-dom"

 const CustomMenu = ({resources, onMenuClick, logout}) => (
   <div>
     {resources.map(resource => (
       <MenuItemLink
         key={resource.name}
         to={`/${resource.name}`}
         primaryText={resource.name}
         onClick={onMenuClick}
       />
     ))}
     <MenuItemLink
       to="/custom-route"
       primaryText="Miscellaneous"
       onClick={onMenuClick}
     />
     <Responsive
       small={logout}
       medium={null} // Pass null to render nothing on larger devices
     />
   </div>
 )

 const mapStateToProps = state => ({
   resources: getResources(state)
 })

 export default withRouter(connect(mapStateToProps)(CustomMenu))

我宁愿在我的主应用程序中没有 redux。看起来我不需要它,因为在尝试自定义它之前我已经进行了 react-admin 工作。

虽然问题有点老了,但是对于还在纠结这个问题的人:

是的,您必须包含 react-reduxredux 软件包,并确保您已更新到最新版本,否则此错误消息仍然会出现。