React 组件间通信
在 React 中,你会经常把页面拆分为一个个组件。随着项目越来越复杂,不同组件之间需要“对话”——这就涉及到了“组件间通信”。这篇文章将带你了解组件间通信的几种常见方式,包括父子组件通信、兄弟组件通信、跨层级通信等,帮助你构建结构清晰、功能完善的组件系统。
父子组件通信:通过 Props
最常见的方式就是通过 props
从父组件向子组件传递数据或函数。
示例:父组件向子组件传值
// 子组件
function Child({ message }) {
return <p>收到的消息:{message}</p>;
}
// 父组件
function Parent() {
return <Child message="你好,我是父组件" />;
}
父组件通过 message
prop 将字符串传给子组件,子组件通过 props.message
读取。
提示
这段代码没有使用 props.message
,而是通过 解构赋值的语法 直接从 props
中取出 message
属性。这是 React 中一种常见、推荐的写法。
等价于:
function Child(props) {
return <p>收到的消息:{props.message}</p>;
}
那为什么推荐解构这种写法?因为:
- 简洁:可以直接使用属性名,不用每次都写
props.xxx
。 - 清晰:在函数参数中就能看到组件依赖了哪些
props
。 - 解构语法是 ES6 的一部分,React 组件函数其实就是普通的 JavaScript 函数,支持这种语法。
示例:子组件向父组件传值
通过回调函数可以实现从子组件向父组件传值。在下面示例中,子组件通过调用父组件传进来的 onSend
函数,实现“反向通信”。
// 子组件
function Child({ onSend }) {
return (
<button onClick={() => onSend('你好,父组件')}>
向父组件发送消息
</button>
);
}
// 父组件
function Parent() {
const handleReceive = (msg) => {
console.log('收到子组件消息:', msg);
};
return <Child onSend={handleReceive} />;
}