我有这个函数,例如:
const FieldRange = props => (
<div className={b('field-range', props)}>
{props.children}
{!!props.errorFieldName && <Field name={props.errorFieldName}/>}
</div>
);
最终,我决定让它更干燥,并像那样重写,将自变量对象重组为属性:
const FieldRange = ({ children, errorFieldName }) => (
<div className={b('field-range', props)}>
{children}
{!!errorFieldName && <Field name={errorFieldName}/>}
</div>
);
但是,哦,不,我仍然需要第二行的原始对象!有没有一种方法可以破坏一个对象,但仍然让它在函数体中可用?
IMO,最好的方法是保持原始代码不变,或者在函数的第一行声明变量:
const FieldRange = props => {
const { children, errorFieldName } = props;
return (
<div className={b('field-range', props)}>
{props.children}
{!!errorFieldName && <Field name={errorFieldName}/>}
</div>
);
);
有一个非常巧妙的解决方案可以让你保持简洁的正文,那就是使用第二个参数,不会将其传递给函数,该函数默认为destructuredprops
:
const FieldRange = (props, { children, errorFieldName } = props) => {
但这很令人困惑,我不推荐它。
您可能会滥用第二个参数进行破坏,默认值为props
。
const FieldRange = (props, { children, errorFieldName } = props) => (
<div className={b('field-range', props)}>
{children}
{!!errorFieldName && <Field name={errorFieldName}/>}
</div>
);