Javascript 将特定参数传递给React中具有多个参数的函数

Javascript 将特定参数传递给React中具有多个参数的函数,javascript,reactjs,function,Javascript,Reactjs,Function,在React中,我创建了下面提到的函数: infoPrint (firstname = '--', middlename = '--', surname = '--') { console.log('Firstname: ', firstname, ', Middle name: ', middlename, ', Surname: ', surname); } 我在componentWillMount中调用此函数: componentWillMount() { var fir

在React中,我创建了下面提到的函数:

infoPrint (firstname = '--', middlename = '--', surname = '--')
{
    console.log('Firstname: ', firstname, ', Middle name: ', middlename, ', Surname: ', surname);
}
我在componentWillMount中调用此函数:

componentWillMount() {
    var firstname = 'Naisarg';
    var surname = 'Parmar';
    this.infoPrint(firstname,surname);
}
我得到以下输出:

Firstname: Naisarg, Middle name: Parmar, Surname: --
但我期待这一次:

Firstname: Naisarg, Middle name: --, Surname: Parmar

通过将文本对象作为函数的参数传递,可以实现这一点:

class User extends Component {
    componentWillMount() {
        var firstname = 'Naisarg';
        var surname = 'Parmar';
        this.infoPrint({ firstname, surname });
    }

    infoPrint({ firstname = '--', middlename = '--', surname = '--' }) {
        console.log('Firstname: ', firstname, ', Middle name: ', middlename, ', Surname: ', surname);
    }
}
这是一种非常常见的模式,对可选参数有很大帮助

-

如果不希望使用对象,则必须按正确顺序传递所有参数:

class User extends Component {
    componentWillMount() {
        var firstname = 'Naisarg';
        var surname = 'Parmar';
        this.infoPrint(firstname, null, surname);
    }

    infoPrint(firstname = '--', middlename = '--', surname = '--') {
        console.log('Firstname: ', firstname, ', Middle name: ', middlename, ', Surname: ', surname);
    }
}

要实现所需功能,您需要为
middlename
参数传递
--
null

componentWillMount() {
    var firstname = 'Naisarg';
    var surname = 'Parmar';
    this.infoPrint(firstname, null, surname);
    this.infoPrint(firstname, '--', surname);
}
或者,您也可以通过对象参数间接传递这些参数来重构方法签名:

函数infoPrint(名称={first:'--',middle:'--',last:'--}){
log('Firstname:',name.first',中间名:',name.Middle',姓氏:',name.last);
}
infoPrint({
第一:"奈沙格",,
最后:“帕尔玛”

});
您需要将其称为
this.infoPrint(firstname,null,姓氏)谢谢@ITH89VT。我知道这一点。但在这种情况下,有这么多的论点,然后我只想通过特定的论点。剩下的参数将采用默认值。所以我不想传递null。像这样。infoPrint(名字、姓氏);然后看看下面的答案。作为对象传递。谢谢@GG。这是符合我要求的答案。但为什么需要在对象中传递参数。不是直接的?它不是必需的(我的意思是,可能还有其他解决方案),但是当您有可选参数时,它非常有用。您可以编写
doSomething({a:1,b:2,d:4,e:5,f:6,g:8})
(所有
null
)而不是
doSomething({a:1,b:2,d:4,e:5,f:6,g:8})。这有点冗长,但您不必再担心以正确的顺序传递所有参数,甚至选项。此外,在传递键时,如果函数包含大量参数,则可读性更高。您所指的是
解构
。当这样写出来时,您实际上是在从对象中提取项。为什么需要在对象中传递参数..而不是直接传递?如问题中所述。@NaisargParmar我已更新了我的答案,并提供了更多详细信息-这是否为您澄清了问题?