Javascript 使用参数调用父函数
我有两个文件(父文件和子文件)。 我希望孩子们能发挥父母的作用。没问题,我能行。另一方面,当我为函数提供参数时,我无法从父函数获取参数 家长:Javascript 使用参数调用父函数,javascript,reactjs,Javascript,Reactjs,我有两个文件(父文件和子文件)。 我希望孩子们能发挥父母的作用。没问题,我能行。另一方面,当我为函数提供参数时,我无法从父函数获取参数 家长: import React from 'react'; import { makeStyles } from '@material-ui/core/styles'; import List from '@material-ui/core/List'; import ListItem from '@material-ui/core/ListItem'; im
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import List from '@material-ui/core/List';
import ListItem from '@material-ui/core/ListItem';
import ListItemIcon from '@material-ui/core/ListItemIcon';
import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';
import ListItemText from '@material-ui/core/ListItemText';
import AuthentificationService from "../../api/AuthentificationService"
import IconButton from '@material-ui/core/IconButton';
import DeleteIcon from '@material-ui/icons/Delete';
import ModalDelete from "../Modal/ModalDelete"
import SimplePopover from "./AddUser";
const useStyles = makeStyles(theme => ({
root: {
width: '100%',
maxWidth: 360,
backgroundColor: theme.palette.background.paper,
},
}));
export default function CheckboxList(props) {
const classes = useStyles();
const [deleteIt, setDeleteIt] = React.useState(false);
const [checked, setChecked] = React.useState([0]);
const [id, setId] = React.useState(0);
const handleToggle = value => () => {
const currentIndex = checked.indexOf(value);
const newChecked = [...checked];
if (currentIndex === -1) {
newChecked.push(value);
} else {
newChecked.splice(currentIndex, 1);
}
setChecked(newChecked);
alert(value.email)
};
const confirmationDeleteUser = value => () => {
setId(value.id);
setDeleteIt(true);
}
/// Here i would like to have my arguments value
const setDeleteStateAndDelete = value => () => {
console.log(value); // when i print the value it is empty
setDeleteIt(false);
}
return (
<div>
<div>
{deleteIt === false ? "" : <ModalDelete parentMethod={setDeleteStateAndDelete()} title="Suppresion utilisateur" message="Vous allez supprimer un utilisateur, êtes-vous sur ? "/>}
</div>
{props.response.map( test => {
if (props.response.length <= 1) {
} else {
return (
<div>
<List className={classes.root}>
<ListItem key={test} role={undefined} dense button onClick={handleToggle(test)}>
<ListItemText primary={`${test.email}`}/>
<ListItemSecondaryAction>
<IconButton edge="end" aria-label="delete" href="">
<DeleteIcon onClick={confirmationDeleteUser(test)}/>
</IconButton>
</ListItemSecondaryAction>
</ListItem>
</List>
</div>
);
}
})}
</div>
);
}
从“React”导入React;
从'@material ui/core/styles'导入{makeStyles};
从“@material ui/core/List”导入列表;
从“@material ui/core/ListItem”导入ListItem;
从“@material ui/core/ListItemIcon”导入ListItemIcon;
从“@material ui/core/ListItemSecondaryAction”导入ListItemSecondaryAction;
从“@material ui/core/ListItemText”导入ListItemText;
从“../../api/AuthentificationService”导入AuthentificationService
从“@material ui/core/IconButton”导入IconButton;
从“@material ui/icons/Delete”导入DeleteIcon;
从“./Modal/ModalDelete”导入ModalDelete
从“/AddUser”导入SimplePover;
const useStyles=makeStyles(主题=>({
根目录:{
宽度:“100%”,
最大宽度:360,
背景色:theme.palete.background.paper,
},
}));
导出默认功能复选框列表(道具){
const classes=useStyles();
const[deleteIt,setDeleteIt]=React.useState(false);
const[checked,setChecked]=React.useState([0]);
const[id,setId]=React.useState(0);
const handleToggle=value=>()=>{
const currentIndex=checked.indexOf(值);
const newChecked=[…checked];
如果(当前索引==-1){
newChecked.push(值);
}否则{
新检查。拼接(当前索引,1);
}
setChecked(newChecked);
警报(value.email)
};
常量确认删除用户=值=>()=>{
setId(value.id);
setDeleteIt(true);
}
///这里我想让我的参数值
const setDeleteStateAndDelete=value=>()=>{
console.log(value);//当我打印值时,它是空的
setDeleteIt(false);
}
返回(
{deleteIt==false?”:}
{props.response.map(测试=>{
如果(props.response.length,则必须交换函数的参数,如下所示:
const setDeleteStateAndDelete = () => value => {
console.log(value); // when i print the value it is empty
setDeleteIt(false);
}
setDeleteStateAndDelete = value => {...}
<ModalDelete parentMethod={setDeleteStateAndDelete} title="Suppresion utilisateur" message="Vous allez supprimer un utilisateur, êtes-vous sur ? "/>}
第一次调用时将调用第一个参数(此处为())
第二次调用将传递给value参数。在您的情况下,该值将是未定义的,因为您在第一次调用中设置了value,而它为空,因为您调用了setDeleteStateAndDelete()
。第二次调用的值将被忽略,因为参数调用为空(())
切换它,值应该从子组件设置
由于您没有将函数的首字母()固定在一起,因此还可以删除第一个括号,如下所示:
const setDeleteStateAndDelete = () => value => {
console.log(value); // when i print the value it is empty
setDeleteIt(false);
}
setDeleteStateAndDelete = value => {...}
<ModalDelete parentMethod={setDeleteStateAndDelete} title="Suppresion utilisateur" message="Vous allez supprimer un utilisateur, êtes-vous sur ? "/>}
设置如下:
const setDeleteStateAndDelete = () => value => {
console.log(value); // when i print the value it is empty
setDeleteIt(false);
}
setDeleteStateAndDelete = value => {...}
<ModalDelete parentMethod={setDeleteStateAndDelete} title="Suppresion utilisateur" message="Vous allez supprimer un utilisateur, êtes-vous sur ? "/>}
}
希望这能有所帮助。您必须为函数交换参数,如下所示:
const setDeleteStateAndDelete = () => value => {
console.log(value); // when i print the value it is empty
setDeleteIt(false);
}
setDeleteStateAndDelete = value => {...}
<ModalDelete parentMethod={setDeleteStateAndDelete} title="Suppresion utilisateur" message="Vous allez supprimer un utilisateur, êtes-vous sur ? "/>}
第一次调用时将调用第一个参数(此处为())
第二次调用将传递给value参数。在您的情况下,该值将是未定义的,因为您在第一次调用中设置了value,而它为空,因为您调用了setDeleteStateAndDelete()
。第二次调用的值将被忽略,因为参数调用为空(())
切换它,值应该从子组件设置
由于您没有将函数的首字母()固定在一起,因此还可以删除第一个括号,如下所示:
const setDeleteStateAndDelete = () => value => {
console.log(value); // when i print the value it is empty
setDeleteIt(false);
}
setDeleteStateAndDelete = value => {...}
<ModalDelete parentMethod={setDeleteStateAndDelete} title="Suppresion utilisateur" message="Vous allez supprimer un utilisateur, êtes-vous sur ? "/>}
设置如下:
const setDeleteStateAndDelete = () => value => {
console.log(value); // when i print the value it is empty
setDeleteIt(false);
}
setDeleteStateAndDelete = value => {...}
<ModalDelete parentMethod={setDeleteStateAndDelete} title="Suppresion utilisateur" message="Vous allez supprimer un utilisateur, êtes-vous sur ? "/>}
}
希望这有帮助
传递函数名称,而不是返回值
传递函数名称,而不是返回值
不,这是不对的,因为setDeleteStateAndDelete实际上是一个工厂函数。它返回一个函数本身,所以这不是问题。如果setDeleteStateAndDelete只是一个函数,setDeleteStateAndDelete parentMethod={setDeleteStateAndDelete}最好。不,这是不对的,因为setDeleteStateAndDelete实际上是一个工厂函数。它本身返回一个函数,所以这不是问题。如果setDeleteStateAndDelete是一个简单的函数,setDeleteStateAndDelete parentMethod={setDeleteStateAndDelete}将是最好的。