React 组件通讯方式

文章介绍了在React中如何进行数据传递,从基本的props实现父子组件间通信,到使用context传递跨多级组件的简单数据,再到Redux作为全局状态管理工具处理不相关组件间的复杂数据共享。每种方式都有其适用场景,props适合简单父子通信,context用于简化特定情况的数据传递,而Redux则针对全局状态管理。
摘要由CSDN通过智能技术生成

目录

props

context

Redux

总结


props

适合父子组件,父组件给子组件传递数据和函数,传函数时,子组件可回传数据给父组件

示例

// parent 里
<Child list={this.state.list} add={this.addHandler}></Child> // React 里传数据和函数都是直接传就可以,内容用{},加 this

// child 里
Child.propTypes = { // 类型检查
    list: PropTypes.arrayof(PropTypes.object).isRequired
}
const { list, add } = this.props // React 里子组件直接用 props 获取父组件传来的数据和函数
add(this.title)

context

上下级(跨多级)组件,即顶层组件往所有子孙组件传递数据,适合一些简单的公共信息,如主题色、语言等,这些信息用 props 传递过于复杂,用 redux 传递过度设计,所以用 context 比较合适

示例

// App
const ThemeContext = React.createContext('light') // 定义一个 context 对象
<ThemeContext.Provider value={this.state.theme}> // 用 ThemeContext.Provider 包裹子组件
    <Toolbar />
</ThemeContext>

// Toolbar,中间组件不必透传
<ThemeButton />
<ThemeLink />

// ThemeButton
static contextType = ThemeContext // 孙子组件设置 context 类型 方法 1,ES6 新语法
render() {
    const theme = this.context // 从 this.context 获取即可
}
ThemeButton.contextType = ThemeContext // 孙子组件设置 context 类型 方法 2

// ThemeLink
function ThemeLink() {
    return <ThemeContext.consumer> // 函数组件用 ThemeContext.consumer 接收
        {value => <p>主题是 {value}</p>}
    </ThemeContext.consumer>
}

Redux

全局状态管理,适合全局不相关组件共享数据,如复杂的公共业务数据管理

总结

父子组件用 props 传递数据和函数,传函数时,子组件可回传数据给父组件 ->

上下层级组件,用 context,适合简单的共享数据,如语言、主题等 ->

全局不相关组件用 redux 共享数据,如复杂的公共业务数据等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值