为什么在按钮中传递一个js语句到onclick会立即激活?
Why does passing a js statement to onclick in a button will be active immediately?
EntryPageContent.js:
import Grid from '@material-ui/core/Grid';
import { Box, Button } from '@material-ui/core';
import { BrowserRouter as Router, Switch, Route, useHistory } from 'react-router-dom';
function EntryPageContent (){
let history = useHistory();
const changeURL =() =>{
history.push('/login');
}
return (
<Box className='h-screen w-screen bg-blue-200 overflow-x-hidden overflow-y-scroll'>
<Box className='h-1/4 flex items-center justify-center'>READY YET APPLICATION ENTRY POINT</Box>
<Box className=' h-3/4 w-full flex items-center justify-center'>
<Grid container spacing={1} align='center'>
<Grid item xs={12} className='space-x-10 md:space-x-60'>
<Button variant="contained" color="primary" onClick={changeURL}>
Pharmacist
</Button>
<Button variant="contained" color="primary">
Pick Up
</Button>
</Grid>
</Grid>
</Box>
</Box>
);
}
export default EntryPageContent;
这是正确的版本,我将函数 changeURL 传递给按钮的 onClick 属性,但我想知道的是为什么它总是转到http://localhost:3000/login
如果我直接将 history.push('/login')
传递给 onClick 而不是函数 changeURL?
因为当您使用 onclick={expr}
时,expr
会被评估以了解要传递给 onclick
的值。因此,如果您执行 onclick={history.push('/login')}
,您将直接评估 history.push('/login')
.
相反,您可以使用箭头函数,例如 onclick={() => history.push('/login')}
。
EntryPageContent.js:
import Grid from '@material-ui/core/Grid';
import { Box, Button } from '@material-ui/core';
import { BrowserRouter as Router, Switch, Route, useHistory } from 'react-router-dom';
function EntryPageContent (){
let history = useHistory();
const changeURL =() =>{
history.push('/login');
}
return (
<Box className='h-screen w-screen bg-blue-200 overflow-x-hidden overflow-y-scroll'>
<Box className='h-1/4 flex items-center justify-center'>READY YET APPLICATION ENTRY POINT</Box>
<Box className=' h-3/4 w-full flex items-center justify-center'>
<Grid container spacing={1} align='center'>
<Grid item xs={12} className='space-x-10 md:space-x-60'>
<Button variant="contained" color="primary" onClick={changeURL}>
Pharmacist
</Button>
<Button variant="contained" color="primary">
Pick Up
</Button>
</Grid>
</Grid>
</Box>
</Box>
);
}
export default EntryPageContent;
这是正确的版本,我将函数 changeURL 传递给按钮的 onClick 属性,但我想知道的是为什么它总是转到http://localhost:3000/login
如果我直接将 history.push('/login')
传递给 onClick 而不是函数 changeURL?
因为当您使用 onclick={expr}
时,expr
会被评估以了解要传递给 onclick
的值。因此,如果您执行 onclick={history.push('/login')}
,您将直接评估 history.push('/login')
.
相反,您可以使用箭头函数,例如 onclick={() => history.push('/login')}
。