React组件通信(详解)

1.父传子

​
类//父组件  <Son info={info} />
//子组件  const { info } = this.props
​
函数//父组件  <Son info={info} />
//子组件   export default function Son(props) { return()}
        const {info} = props

2.子传父

类//父组件 要绑定一个changeInfo={info => { this.changeInfo(info) }}回调
//子组件  在子组件中通过某个点击事件 触发  this.props.changeInfo(’子组件的数据‘) 这个事件
​
函数//父组件 <Son changeInfo={info => changeInfo(info)} />
​

3.Context跨组件通信

类//祖组件 创建并暴露Context对象 ,并使用 provide包裹
export const { Provider, Consumer } = React.createContext()
        <Provider value={{ username, age }}>
          <Parent />
        </Provider>
//后代组件  导入祖组件中暴露出来的 Consumer
import { Consumer } from './Grandpa'
<Consumer>
        {
          (value) => {
            return (<div className='son' >
              <h3>我是子组件</h3>
              <h4>我接收到的用户名是:{value.username}</h4>
              <h4>我接收到的年龄是:{value.age}</h4>
            </div >)
          }
        }
</Consumer >
函数// 祖组件 创建并暴露Context对象 ,并使用 provide包裹
export const { Provider, Consumer } = React.createContext()
     <Provider value={user}>
        <Parent />
      </Provider>
​
//后代组件
import { Consumer } from './Grandpa'
<Consumer>
  {value => {
          return `${value.username}`
  }
</Consumer>
//可以有多个 Consumer标签存在

4.消息订阅与发布

PubSubJS安装: npm install pubsub-js

类//父组件 import PubSub from 'pubsub-js'
    const token = PubSub.subscribe('changeUser', (msg, user) => {
      setUser(user)
    })
    
//子组件
 const user = { username: 'aDiao', age: 20 }
    function changeUserinfo() {
    PubSub.publish('changeUser', user)
  }
  子组件修改 user的数据

5.Redux

1.通过createStore函数创建Redux store,该函数接受reducer和初始状态作为参数。
2.在组件中通过方法调用 store.dispatch({type:inc,data})
3.store在收到action后,会将其转交给reducer处理,reducer接收两个参数,第一个是初始值(自己在文件中设置),第二个是传递过来的 action,
4.根据action中 的 type类型 和 传递的荷载信息更新state。
5.在入口文件 使用 store.subscribe(()=>{}) 来检测redux状态改变,并作出实时数据更新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值