当前位置: 首页 > 知识库问答 >
问题:

函数作为React子函数无效。如果您从渲染中返回Component而不是,则可能会发生这种情况。在反应v6中

谢俊力
2023-03-14

您好,我是新来的反应,并让自己困在这里,我的版本是v6,因此有一点问题的理解,我遵循udemy的教程

发生的错误是 - 函数作为 React 子函数无效。如果返回组件而不是从呈现中返回,则可能会发生这种情况。或者,也许您打算调用此函数而不是返回它。

这是在我家

class Dashboard extends Component {
  constructor(props) {
    super(props);   
    this.state = {
      child: props.nestedRoute,
      search: "",
    };
  }

  componentDidMount() {
    this.activeNav();
  }

  activeNav() {
    const pathname = window.location.pathname;
    const possibleRoutes = [
      { routes: "/dashboard", targetId: "home" },
      { routes: "/addProduct", targetId: "addProduct" },
      { routes: "/products", targetId: "products" },
      { routes: "/profile", targetId: "profile" },
    ];
    possibleRoutes.forEach(({ route, targetId }) => {
      window.jQuery(`#${targetId}`).removeClass("active");
      if (route === pathname) {
        window.jQuery(`#${targetId}`).addClass("active");
      }
    });
  }

  render() {
    const Child = this.state.child
    console.log(Child)
    const { user } = this.props.auth;

    return (
      <div id="content-wrapper" className="d-flex flex-column">
        <div id="content">
          <nav className="navbar navbar-expand navbar-light bg-white topbar mb-44 static-top shadow">        
            <ul className="navbar-nav ml-auto">
              <li className='nav-item dropdown no-arrow'>
                <Link
                  className="nav-link dropdown-toggle"
                  to="#"
                  id="userDropdown"
                  role="button"
                  data-toggle="dropdown"
                  aria-haspopup="true"
                  aria-expanded="false"
                >
                  <span className="mr-2 d-none d-lg-inline text-gray-600 small">
                    {user.name}
                  </span>
                  <Avatar size={40}>
                    {user.name && this.avatarText(user.name)}
                  </Avatar>
                </Link>

                <div
                  className="dropdown-menu dropdown-menu-right shadow animated--grow-in"
                  aria-labelledby="userDropdown"
                >
                  <Link className="dropdown-item" to="#">
                    <i className="fas fa-user fa-sm fa-fw mr-2 text-gray-400"></i>
                    Profile
                  </Link>
                  <Link className="dropdown-item" to="#">
                    <i className="fas fa-cogs fa-sm fa-fw mr-2 text-gray-400"></i>
                    Settings
                  </Link>
                  <Link className="dropdown-item" to="#">
                    <i className="fas fa-list fa-sm fa-fw mr-2 text-gray-400"></i>
                    Activity Log
                  </Link>
                  <div className="dropdown-divider"></div>
                  <Link
                    className="dropdown-item"
                    to="#"
                    onClick={this.logUserOut}
                  >
                    <i className="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400"></i>
                    Logout
                  </Link>
                </div>
              </li>
            </ul>
          </nav>
          <Child {...this.props} search={this.state.search} />
        </div>
      </div>
    );
  }
}

Dashboard.propTypes = {
  auth: PropTypes.object.isRequired,
  logout: PropTypes.func.isRequired,
};

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

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

我的App.js是这样的

function App(props) {
  useEffect(() => {
    store.dispatch(setCurrentUser())
  }, [])

  return (
    <Provider store={store}>
      <Router>
        <Routes>
          <Route exact path="/" element={<Landing/>} />
          <Route exact path="/" element={<ProtectedRoute/>}>  
            <Route exact 
              path="/dashboard" 
              element={()=> (<Dashboard {...props} nestedRoute={Home} />)} 
            />
            <Route exact 
              path="/dashboard/addProduct" 
              element={()=> (<Dashboard {...props} nestedRoute={AddProduct} />)} 
            />
          </Route>
          <Route exact path="/register" element={<Register/>} />
          <Route exact path="/login" element={<Login/>} />
        </Routes>
      </Router>
    </Provider>

  );
}

共有1个答案

鲁财
2023-03-14

在react路由器中使用render方法。

<Route exact 
 path="/dashboard/addProduct" 
 render={()=> <Dashboard {...props} nestedRoute={AddProduct} />} 
/>
 类似资料: