使用 React,我无法将带有参数的函数发送到我的组件之一
Using React, I'm having trouble sending a function with parameters to one of my components
我将 React 与 NextJS 结合使用
我想做的是能够将具有参数的函数发送到我的 'Alerts' 组件,以便它可以在执行该函数之前等待用户反馈。
例如,在清空列表之前,我想确保用户在实际触发该功能之前可以确认。
所以,基本上就是从这行代码开始的
pushAlert(closeAlert, "New List Warning", "Generating a new list will erase all unlocked instruments. Would you like to continue?", "danger", () => {generateNewList(min, max)}, undefined, false)
关注第五个道具,'() => {generateNewList(min, max)}' 部分。另外,min和max都是父函数传入的参数
这是 pushAlert 的样子
const pushAlert = (onClosing, alertHeading, alertText, alertVariant, methodToExecute, buttonText, buttonless) => {
setAlerts([...alerts, {
"key": keyInc,
"onClosing": onClosing,
"alertHeading": alertHeading,
"alertText": alertText,
"alertVariant": alertVariant,
"methodToExecute": methodToExecute,
"buttonText": buttonText,
"buttonless": buttonless
}])
setKeyInc(keyInc + 1)
console.log(methodToExecute)
}
基本上,我将所有警报存储在一个数组中,然后我将这些 JS 对象发送到一个反应组件,该组件将为该数组中的每个警报生成 bootstrap 个警报。
相当标准的东西。
为了简洁起见,这里是我的警报功能中使用 'methodToExecute' 的地方。只是不想用可能不相关的代码轰炸你,让我知道我是否需要粘贴更多内容。
<Button variant={alert.alertVariant} onClick={()=> {alert.methodToExecute != undefined ? alert.methodToExecute : onClosing(alert.key)}}>{alert.buttonText != undefined ? alert.buttonText : 'OK'}</Button>
但是当前代码不起作用。我最初用于将函数推送到新警报对象的语法是否存在问题?还是其他原因?
我已经完成并记录了 'methodToExecute' 并且奇怪的是,当我记录它时,它实际上 returns 调用第一行代码的父函数。
感谢您的帮助!让我知道我是否需要添加我排除的一些代码!
根据您的 Button
代码,您似乎根本没有调用 methodToExecute
回调函数。
<Button
variant={alert.alertVariant}
onClick={() => {
alert.methodToExecute != undefined
? alert.methodToExecute // <-- not invoked!!
: onClosing(alert.key);
}}
>
{alert.buttonText != undefined ? alert.buttonText : 'OK'}
</Button>
鉴于:
pushAlert(
closeAlert,
"New List Warning",
"Generating a new list will erase all unlocked instruments. Would you like to continue?",
"danger",
() => { generateNewList(min, max); },
undefined,
false
)
第五个参数是一个函数,应该在按钮的 onClick
处理程序中调用。
<Button
variant={alert.alertVariant}
onClick={() => {
alert.methodToExecute != undefined
? alert.methodToExecute() // <-- invoked!!
: onClosing(alert.key);
}}
>
{alert.buttonText != undefined ? alert.buttonText : 'OK'}
</Button>
我将 React 与 NextJS 结合使用
我想做的是能够将具有参数的函数发送到我的 'Alerts' 组件,以便它可以在执行该函数之前等待用户反馈。
例如,在清空列表之前,我想确保用户在实际触发该功能之前可以确认。
所以,基本上就是从这行代码开始的
pushAlert(closeAlert, "New List Warning", "Generating a new list will erase all unlocked instruments. Would you like to continue?", "danger", () => {generateNewList(min, max)}, undefined, false)
关注第五个道具,'() => {generateNewList(min, max)}' 部分。另外,min和max都是父函数传入的参数
这是 pushAlert 的样子
const pushAlert = (onClosing, alertHeading, alertText, alertVariant, methodToExecute, buttonText, buttonless) => {
setAlerts([...alerts, {
"key": keyInc,
"onClosing": onClosing,
"alertHeading": alertHeading,
"alertText": alertText,
"alertVariant": alertVariant,
"methodToExecute": methodToExecute,
"buttonText": buttonText,
"buttonless": buttonless
}])
setKeyInc(keyInc + 1)
console.log(methodToExecute)
}
基本上,我将所有警报存储在一个数组中,然后我将这些 JS 对象发送到一个反应组件,该组件将为该数组中的每个警报生成 bootstrap 个警报。
相当标准的东西。
为了简洁起见,这里是我的警报功能中使用 'methodToExecute' 的地方。只是不想用可能不相关的代码轰炸你,让我知道我是否需要粘贴更多内容。
<Button variant={alert.alertVariant} onClick={()=> {alert.methodToExecute != undefined ? alert.methodToExecute : onClosing(alert.key)}}>{alert.buttonText != undefined ? alert.buttonText : 'OK'}</Button>
但是当前代码不起作用。我最初用于将函数推送到新警报对象的语法是否存在问题?还是其他原因?
我已经完成并记录了 'methodToExecute' 并且奇怪的是,当我记录它时,它实际上 returns 调用第一行代码的父函数。
感谢您的帮助!让我知道我是否需要添加我排除的一些代码!
根据您的 Button
代码,您似乎根本没有调用 methodToExecute
回调函数。
<Button
variant={alert.alertVariant}
onClick={() => {
alert.methodToExecute != undefined
? alert.methodToExecute // <-- not invoked!!
: onClosing(alert.key);
}}
>
{alert.buttonText != undefined ? alert.buttonText : 'OK'}
</Button>
鉴于:
pushAlert(
closeAlert,
"New List Warning",
"Generating a new list will erase all unlocked instruments. Would you like to continue?",
"danger",
() => { generateNewList(min, max); },
undefined,
false
)
第五个参数是一个函数,应该在按钮的 onClick
处理程序中调用。
<Button
variant={alert.alertVariant}
onClick={() => {
alert.methodToExecute != undefined
? alert.methodToExecute() // <-- invoked!!
: onClosing(alert.key);
}}
>
{alert.buttonText != undefined ? alert.buttonText : 'OK'}
</Button>