React类组件中state必须在constructor中初始化:先调用super(props)或super(),再直接赋值this.state为对象;不可为null/undefined,后续更新须用setState()。

在 React 类组件中,自定义元素(即你写的类组件)的内部状态(state)必须在构造函数 constructor 中初始化,且需遵循明确的语法和顺序规则。
构造函数中初始化 state 的正确方式
- 必须先调用
super(props)(如果要用this.props)或至少super()(如果不用props) - 紧接着给
this.state赋一个对象,不能是null或undefined -
this.state只能在这里直接赋值;后续更新必须用this.setState()
class MyComponent extends React.Component {
constructor(props) {
super(props); // ✅ 必须放在第一行
this.state = {
name: '张三',
count: 0,
isActive: true
}; // ✅ 直接赋值对象,初始化完成
}
render() {
return <div>姓名:{this.state.name},数量:{this.state.count}</div>;
}
}
常见错误与注意事项
- ❌ 不调用
super(props)却访问this.props→this.props是undefined - ❌ 在
super()之前使用this→ JavaScript 报错:“Must call super constructor” - ❌ 在构造函数外直接写
this.state = {...}→ 无效,不会被 React 识别 - ❌ 用
this.state = null或this.state = []→ React 要求state是对象,否则可能触发警告或异常
如果不需要 props,可以只写 super()
constructor() {
super(); // 不传 props,this.props 就不可用
this.state = { loading: false };
}
但只要你在构造函数里用了 this.props(比如 console.log(this.props) 或 this.state = { ...this.props.initialData }),就必须写 super(props)。
补充:事件方法绑定也常放在这里
虽然不是 state 初始化,但构造函数另一个常见用途是绑定事件处理器的 this:
constructor(props) {
super(props);
this.state = { clicked: false };
this.handleClick = this.handleClick.bind(this); // ✅ 防止 this 指向丢失
}
handleClick() {
this.setState({ clicked: true });
}
不复杂但容易忽略











