这些之间的功能差异是什么(如果有的话)?在这两种情况下,传播道具都会覆盖预设道具。有什么理由可以使用一种语法而不是另一种语法?
const Input = (props) => (
<input {...props} />
);
Input.defaultProps = {
className: "input",
};
const Input = (props) => (
<input className="input" {...props} />
);
答案 0 :(得分:2)
当您的组件需要某些道具来操作时,您可以使用defaultProps
,但您不确定是否会在任何时候都使用它。所以你提供了一个默认值。如果您的实际道具不存在,则会设置此项。
您的spread
运算符展开(或传播)给定对象。每个键值对作为prop传递给组件。如果你不确定你的子组件需要的道具,你会使用它。所以只需将它展开,让孩子使用它所需要的东西。 (这只是一次情景)
在您的问题中,您已经提到spread
运算符会覆盖两种情况下的当前道具。最重要的行为是因为扩展运算符的位置而不是因为使用defaultProps
或不存在相同的行为。
所以我们假设下面的代码。在此,input
会在myClass
中获得className
作为道具。因为您在props
之后传播了className
。
const props = {
className: 'myClass',
};
<input className="input" {...props} />
在下面的代码中,input
会在input
中获得className
作为道具。
const props = {
className: 'myClass',
};
<input {...props} className="input" />