如何将具有默认值的无状态组件(反应)中的 props 解构为一个变量,并在 JSX 中对该变量应用扩展运算符?
How to destructure props in stateless component (react) with default values into a variable and apply spread operator with that variable in JSX?
下面的代码正确呈现
export default ({
primitive = "a-sky",
height = "2048",
radius= "30",
width= "2048"
}) => {
const properties = { primitive, height, radius, width}
return <Entity {...properties} />
}
但是,我可以做些什么来省略复制道具名称的需要 primitive、height 等?
下面的代码不起作用,但显示了我的意思
let properties
export default ({
primitive = "a-sky",
height = "2048",
radius= "30",
width= "2048"
} = properties) => {
return <Entity {...properties} />
}
你传递给这个箭头函数的数据结构是什么? javascript 中的对象需要 :
而不是 =
。如果您尝试声明默认值,例如以下表示法:
( x = 'default for x', y = 'default for y' ) => {
console.log(x, y);
}
然后从箭头函数的参数部分中删除 { }
。
将其恢复为您发布的内容:
我建议将您的箭头函数传递给一个名为 params
的对象,然后在该对象上使用扩展运算符。
((params) => <Entity {...params} />)({ a: "val", b: "val", c: "val"})
您的尝试很聪明,但是对象解构不允许您在将属性放入另一个对象时剥离它们。但是,您可以将 props 散布到您设置默认值的对象中,并且 return 该对象:
export default props => {
const propsWithDefaults = {
primitive: "a-sky",
height: "2048",
radius: "30",
width: "2048",
...props
};
return <Entity {...propsWithDefaults} />
}
props
中的属性将覆盖您硬编码的属性。
编辑:另一种方式似乎更符合您的要求:
export default props => {
const defaultProps = {
primitive: "a-sky",
height: "2048",
radius: "30",
width: "2048"
};
return <Entity {...Object.assign(defaultProps, props)} />
}
Object.assign 采用第一个参数,并将后续参数的所有属性放在第一个参数上,从左到右覆盖冲突。然后 return 是第一个参数。
下面的代码正确呈现
export default ({
primitive = "a-sky",
height = "2048",
radius= "30",
width= "2048"
}) => {
const properties = { primitive, height, radius, width}
return <Entity {...properties} />
}
但是,我可以做些什么来省略复制道具名称的需要 primitive、height 等?
下面的代码不起作用,但显示了我的意思
let properties
export default ({
primitive = "a-sky",
height = "2048",
radius= "30",
width= "2048"
} = properties) => {
return <Entity {...properties} />
}
你传递给这个箭头函数的数据结构是什么? javascript 中的对象需要 :
而不是 =
。如果您尝试声明默认值,例如以下表示法:
( x = 'default for x', y = 'default for y' ) => {
console.log(x, y);
}
然后从箭头函数的参数部分中删除 { }
。
将其恢复为您发布的内容:
我建议将您的箭头函数传递给一个名为 params
的对象,然后在该对象上使用扩展运算符。
((params) => <Entity {...params} />)({ a: "val", b: "val", c: "val"})
您的尝试很聪明,但是对象解构不允许您在将属性放入另一个对象时剥离它们。但是,您可以将 props 散布到您设置默认值的对象中,并且 return 该对象:
export default props => {
const propsWithDefaults = {
primitive: "a-sky",
height: "2048",
radius: "30",
width: "2048",
...props
};
return <Entity {...propsWithDefaults} />
}
props
中的属性将覆盖您硬编码的属性。
编辑:另一种方式似乎更符合您的要求:
export default props => {
const defaultProps = {
primitive: "a-sky",
height: "2048",
radius: "30",
width: "2048"
};
return <Entity {...Object.assign(defaultProps, props)} />
}
Object.assign 采用第一个参数,并将后续参数的所有属性放在第一个参数上,从左到右覆盖冲突。然后 return 是第一个参数。