defaultProps是react类组件的静态属性,用于为undefined的props提供默认值;函数组件应使用解构赋值默认参数替代,且二者不可混用。

在 javaScript 中,defaultProps 是 React 类组件(class Component)中用于定义组件默认 props 的一种方式。它只对类组件有效,函数组件不支持 defaultProps(现代写法推荐用解构赋值 + 默认参数替代)。
defaultProps 是什么?
defaultProps 是一个静态属性(Static Property),你把它定义在类组件上,React 会在组件接收的 props 缺失对应字段时,自动补上你设定的默认值。
注意:它只在 props 为 undefined 时生效,如果传了 NULL 或 0、空字符串等“falsy 值”,defaultProps 不会覆盖。
怎么写 defaultProps?
写法很简单,在类定义后直接加:
立即学习“Java免费学习笔记(深入)”;
class Button extends React.Component { render() { return <button onClick={this.props.onClick}>{this.props.text}</button>; } } Button.defaultProps = { text: '点击我', onClick: () => console.log('默认点击') };
这样,如果调用 <button></button> 没传 text 或 onClick,就会用上面的默认值。
函数组件怎么设默认 props?
函数组件不用 defaultProps,直接在参数里用解构 + 默认值更清晰、更推荐:
- ✅ 推荐写法(es6 解构默认值):
function Button({ text = '点击我', onClick = () => console.log('默认点击') }) { return <button onClick={onClick}>{text}</button>; }
- ⚠️ 注意:不要混用
defaultProps和函数组件 —— 它会被忽略,且可能引发警告(尤其在严格模式或新版本 React 中)。
常见误区和注意事项
-
defaultProps只对类组件有效,且必须是静态属性,不能在实例方法里定义。 - 如果 props 传了
undefined,才会触发默认值;传了null、false、0都不会触发。 - React 18+ 在开发模式下会对
defaultProps做更多检查,建议优先用函数组件 + 解构默认值,更直观、更易维护。 - typescript 中,类型定义要和默认值一致,否则类型检查可能报错(比如
text?: String要允许undefined,或用text: string = 'xxx')。
基本上就这些。用函数组件的话,记住用解构默认值就行;写类组件时,defaultProps 还能用,但已不是主流推荐方式。