gpt4 book ai didi

javascript - 传递一个函数

转载 作者:行者123 更新时间:2023-12-02 22:42:12 25 4
gpt4 key购买 nike

还在学习Java和函数。正在编写一些代码,但被难住了。

在我的 App.js 类中,return 语句中有一行代码,如下所示:

<Toolbar drawerClickHandler ={props.drawerToggleClickHandler}/>

在我的 Toolbar 类中,它将通过“单击”激活,如下所示:

<DrawerToggleButton click={props.drawerClickHandler}/>

最后将在以下代码中连接到另一个类 DrawerToggleButton:

<button className="toggle-button" onClick={props.click}>

Toolbas 类和 DrawerToggleButton 没有传递问题,但 props.drawerToggleClickHandler 不起作用,显示“未解析的变量抽屉ToggleClickHandler”。

我该如何解决这个问题?完整代码如下:

应用程序.js:

import React, { useState, useEffect } from "react";
// import logo from './logo.svg';
import './App.css';
import Routes from "./Routes";
import { Auth } from "aws-amplify";
import { Link, withRouter } from "react-router-dom";
// import { Navbar } from "react-bootstrap";
import Toolbar from './components/Toolbar/Toolbar';
import SideDrawer from './components/SideDrawer/SideDrawer';
import Backdrop from './components/Backdrop/Backdrop';


function App(props) {
const [isAuthenticated, userHasAuthenticated] = useState(false);
const [isAuthenticating, setIsAuthenticating] = useState(true);
const [sideDrawerOpen, setIsSideDrawerOpen] = useState(false);

useEffect(() => {
onLoad();
}, []);

async function onLoad() {
try {
await Auth.currentSession();
userHasAuthenticated(true);
}
catch(e) {
if (e !== 'No current user') {
alert(e);
}
}
setIsAuthenticating(false);
}

function handleLogout() {
userHasAuthenticated(false);
props.history.push("/login");
}

function drawerToggleClickHandler(){
if(sideDrawerOpen){
return {setIsSideDrawerOpen: false};
}
else{
return {setIsSideDrawerOpen: true};
}

}

let sideDrawer;
let backdrop;
let toolBar;

if(userHasAuthenticated === true){
toolBar = <Toolbar drawerClickHandler ={props.drawerToggleClickHandler}/>
}
if (userHasAuthenticated === true && sideDrawerOpen === true){
sideDrawer = <SideDrawer/>;
backdrop = <Backdrop/>
}
return (
<div className="App container" style={{height: '100%'}}>
{toolBar}
{sideDrawer}
{backdrop}
{/*<Toolbar/>*/}
{/*<SideDrawer/>*/}
{/*<Backdrop/>*/}
<Routes appProps={{ isAuthenticated, userHasAuthenticated }} />
</div>
);
}

export default withRouter(App);

工具栏.js:

import React from 'react';
import './Toolbar.css';
import DrawerToggleButton from '../SideDrawer/DrawerToggleButton'
import '../SideDrawer/DrawerToggleButton';
import sideDrawer from "../SideDrawer/SideDrawer";

const toolbar = props =>(
<header className="toolbar">
<nav className="toolbar_navigation">
<div>
<DrawerToggleButton click={props.drawerClickHandler}/>
</div>
<div className="toolbar_logo"><a href="/">Kleen Portal</a></div>
<div className="spacer" />
<div className="toolbar_navigation-items">
<ul>
<li><a href="/">Logout</a></li>
</ul>
</div>
</nav>
</header>
);

export default toolbar;

DrawerToggleButton.js:

import React from 'react';
import './DrawerToggleButton.css'

const drawerToggleButton = props => (
<button className="toggle-button" onClick={props.click}>
<div className="toggle-button_line" />
<div className="toggle-button_line" />
<div className="toggle-button_line" />
</button>
);

export default drawerToggleButton;

最佳答案

您不会更改状态:您需要将函数更改为此(我建议将 setState 重命名为 setsIsSideDrawerOpen)

function drawerToggleClickHandler(){
if(sideDrawerOpen){
setState(false)
}
else{
setState(true)
}

}

改变

toolBar = <Toolbar drawerClickHandler ={props.drawerToggleClickHandler}/>

toolBar = <Toolbar drawerClickHandler ={drawerToggleClickHandler}/>

drawerToggleClickHandler 不是 Prop

[另外 app.js 不是一个类,它是一个功能组件]

要回答您的第二个评论问题,我不会将您的组件分配给变量,只需内联即可:

<div className="App container" style={{height: '100%'}}>
{userHasAuthenticated && <Toolbar drawerClickHandler =props.drawerToggleClickHandler}/>
}

...

关于javascript - 传递一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58549125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com