React 组件的 state 和 props区别
文章类型:React
发布者:hp
发布时间:2025-03-27
React 组件的 state 和 props 都在数据传递上有重要作用,那么他们的差异是什么呢?
props=>
1:由父组件传递,作为组件的对外接口,用于跨组件数据传递,子组件无法直接修改
2:只读属性,若需修改需通过父组件回调函数实现
state=>
1:由组件自身创建和维护,用于存储动态变化的数据,通过 setState 更新
2:可变性是其核心特征,状态变化会触发组件重新渲染
props=>
1:父组件拥有所有权,子组件仅能读取
2:用于配置子组件行为或样式
state=>
1:组件私有,其他组件无法直接访问(除非通过状态提升或 Context 共享:
2:管理用户交互、UI 状态等内部逻辑
props=>父组件更新 props 时,子组件会重新渲染
state=>调用 setState 更新状态,React 合并更新后触发渲染
props=>
1:在组件树中向下传递,支持父子通信
2:适用于静态数据或跨组件配置(如显示文本、回调函数)
state=>
1:仅限当前组件使用,管理动态数据(如表单输入、开关状态)
2:数据流动方向单一,可传递给子组件作为 props,但无法反向传递
props=>父组件更新时,子组件若依赖该 props 会重新渲染
state=>更新可能是异步的,React 会优化合并多次 setState 调用以提高性能
1:props
// 父组件(传递数据)
class ParentComponent extends React.Component {
render() {
return <ChildComponent title="用户列表" data={["Alice", "Bob"]} />; // :ml-citation{ref="1,3" data="citationList"}
}
}
// 子组件(接收并渲染 props)
const ChildComponent = (props) => (
<div>
<h1>{props.title}</h1> {/* 父组件传递的只读数据 */}
<ul>
{props.data.map((name) => (
<li key={name}>{name}</li>
))}
</ul>
</div>
);
2:state
// 计数器组件(通过 state 控制动态数据)
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 }; // 初始化 state :ml-citation{ref="2,5" data="citationList"}
}
increment = () => {
this.setState({ count: this.state.count + 1 }); // 更新 state 触发重新渲染 :ml-citation{ref="1,4" data="citationList"}
};
render() {
return (
<div>
<p>当前计数: {this.state.count}</p>
<button onClick={this.increment}>点击增加</button>
</div>
);
}
}
1:只读性=>React 中 props 是只读的,组件不能修改自己的 props
2:数据类型=>props 可以传递任何类型的数据,包括字符串、数字、对象、函数等
3:默认值=>可以通过 defaultProps 为组件的 props 设置默认值
1:异步更新=>setState 是异步操作,多个 setState 调用可能会被合并
2:不可变性=>不要直接修改 state,而是创建新的对象来更新状态
3:局部更新=>setState 只更新传入的字段,其他字段保持不变
1:props 是父组件对子组件的“配置”,而 state 是组件自身的“记忆”
2:控制权=>props 由外部控制,state 由组件自主管理
3:更新驱动=>props 变化依赖父级,state 变化依赖组件内部逻辑
4:数据流向=>props 向下传递,state 仅内部维护