簡體   English   中英

React/Redux - TypeError:無法讀取未定義的屬性“道具”

[英]React/Redux - TypeError: Cannot read property 'props' of undefined

我是 React 的新手,我正在嘗試使用 CoreUI 創建一個動態的 NavBar。 現在我的操作中有一個 static 數組,所以我可以看到它在導航欄上顯示沒有錯誤。 但是一旦我運行它,我就會得到一個錯誤。 我想做的是創建一個新的動態導航欄並將其插入我的 static 欄

// 管理導航

import React, { Component } from "react";
import { getStoreType } from "../redux/actions/storeTypeActions";
import PropTypes from "prop-types";
import { connect } from "react-redux";

class AdminNav extends Component {
  static propTypes = {
    getStoreType: PropTypes.func.isRequired,
    storeType: PropTypes.object.isRequired,
  };

  componentDidMount() {
    this.props.getStoreType();
  }
}

console.log("AdminNav", this.props);

const mapStateToProps = (state) => ({
  storeType: state.storeType,
  auth: state.auth,
});

export default connect(mapStateToProps, { getStoreType })(AdminNav);

//減速器

import { GET_STORETYPE, STORETYPE_LOADING } from "../actions/types";

const initialState = {
  items: [
    {
      title: true,
      name: "ADMINISTRATOR",
      wrapper: {
        // optional wrapper object
        element: "", // required valid HTML5 element tag
        attributes: {}, // optional valid JS object with JS API naming ex: { className: "my-class", style: { fontFamily: "Verdana" }, id: "my-id"}
      },
      class: "", // optional class names space delimited list for title item ex: "text-center"
    },
  ],
  loading: false,
};

export default function (state = initialState, action) {
  switch (action.type) {
    case GET_STORETYPE:
      return {
        ...state,
        loading: false,
      };
    case STORETYPE_LOADING: {
      return {
        ...state,
        loading: true,
      };
    }
    default:
      return state;
  }
}

//DefaultLayout.js

import React, { Component, Suspense } from "react";
import { Redirect, Route, Switch } from "react-router-dom";
import * as router from "react-router-dom";
import { Container } from "reactstrap";
import {
  AppAside,
  AppFooter,
  AppHeader,
  AppSidebar,
  AppSidebarFooter,
  AppSidebarForm,
  AppSidebarHeader,
  AppSidebarMinimizer,
  AppBreadcrumb2 as AppBreadcrumb,
  AppSidebarNav2 as AppSidebarNav,
} from "@coreui/react";


// Sidebar nav config (Owner/Admin)
    import admin_navigation from "../_nav-admin";
    // Routes Config
    import routes from "../../routes";
    import { connect } from "react-redux";
    import PropTypes from "prop-types";
    import { logout } from "../../redux/actions/authActions";

    const DefaultAside = React.lazy(() => import("./DefaultAside"));
    const DefaultFooter = React.lazy(() => import("./DefaultFooter"));
    const DefaultHeader = React.lazy(() => import("./DefaultHeader"));
    const AdminHeader = React.lazy(() => import("./AdminHeader"));

    class DefaultLayout extends Component {
      constructor(props) {
        super(props);
        this.state = {
          role: "",
          path: "",
          dashboard: [],
        };
      }
      loading = () => (
        <div className="animated fadeIn pt-1 text-center">Loading...</div>
      );

      static propTypes = {
        isAuthenticated: PropTypes.bool,
        auth: PropTypes.object.isRequired,
        logout: PropTypes.func.isRequired,
      };
    render() {
        const { isAuthenticated } = this.props.auth;
        // If NOT Authenticated, redirect to login
        if (!isAuthenticated) {
          this.props.history.push("/login");
        }
        const role = this.props.auth.user.role;

        return (
          <div className="app">
            <div className="app-body">
              <AppSidebar fixed display="lg">
                <AppSidebarHeader />
                <AppSidebarForm />
                <Suspense>
                    <AppSidebarNav
                      navConfig={admin_navigation}
                      {...this.props}
                      router={router}
                    />
               </Suspense>
 <AppFooter>
          <Suspense fallback={this.loading()}>
            <DefaultFooter />
          </Suspense>
        </AppFooter>
      </div>
    );
  }
}

const mapStateToProps = (state) => ({
  auth: state.auth,
});

export default connect(mapStateToProps, { logout })(DefaultLayout);

這是一個問題,您嘗試訪問this不是在 class 方法中。

console.log("AdminNav", this.props);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM