美文网首页
react隔代传值

react隔代传值

作者: 雨落倾城夏微凉_e861 | 来源:发表于2020-08-05 13:20 被阅读0次

react隔代传值的方式有很多,开发中可能经常会用到props一层一层向下传值,更多的可能是用到react-redux。今天我们来看看Context的传值,一样可以实现隔代传值。下面实现一些小demo来看看。

创建一个全局的Context,在项目中也可以写一个单独的组件从外部导入。

const demoContext = React.createContext();
const { Provider, Consumer } = demoContext;

第一种:

//定义一个父组件
function Parent(){
  return(
      <div>
        <Provider value="parent-son-grandson">//把需要传值的组件要放到Provider里面
          <Consumer>
            {value => <Son val={value}></Son>}
          </Consumer>
        </Provider>
      </div>
  )
}
//定义一个子组件
function Son(props){
  return(
    <div>
      son---{props.val}
      <Consumer>
        {value => < Grandson item={value}></Grandson >}
      </Consumer>
    </div>
  )
}
//定义一个孙组件
function Grandson(props){
  return <div>Grandson --- {props.item}</div>
}
export default Parent
1.png

Provider中定义的value值通过Consumer将值传给了子和孙,Provider里面可以包含多个Consumer并不只是一个。

第二种孙组件是类组件:

//父组件不变,子组件添加一个孙组件2,再创建一个孙组件
function Son(props){
  return(
    <div>
      son---{props.val}
      <Consumer>
        {value => <Grandson item={value}></Grandson>}
      </Consumer>
      <Grandson2></Grandson2>//孙组件2
    </div>
  )
}
//定义类组件Grandson2
class Grandson2 extends React.Component{
  static contextType = demoContext;
  render(){
    return(
    <div>Grandson2 ---- {this.context}</div>
    )
  }
}

注意:定义的静态成员contextType以及this.context这两个是固定的不是自定义的。


2.png

第三种利用hooks

//需要引入useContext
import React, {useContext} from "react"

子组件添加Grandson3,再创建一个Grandson3

function Son(props){
  return(
    <div>
      son---{props.val}
      <Consumer>
        {value => <Grandson item={value}></Grandson>}
      </Consumer>
      <Grandson2></Grandson2>
      <Grandson3></Grandson3>
    </div>
  )
}
//定义Grandson3
function Grandson3(){
  const myContext = useContext(demoContext);
  return <div>Grandson3 -- {myContext}</div>
}
3.png

我们发现使用hooks传值非常便利。

其实我们可以完全不用Consumer;只需要保障Son组件在Parent组件的Provider中包裹就可以。Son如果需要用到父组件的值可以使用Consumer传递,也可以采用后两种方法传值。

相关文章

  • react隔代传值

    react隔代传值的方式有很多,开发中可能经常会用到props一层一层向下传值,更多的可能是用到react-red...

  • React Native学习笔记(七)-页面跳转、传值、回传

    React Native页面跳转、传值、回传 Navigator --- 在React Native中的不同页面我...

  • react 学习

    包含 react基础 react传值 react路由 和redux管理 和react-redux reactDom...

  • React Native --传值

    今天主要记录一下react native的几种传值方式; 1.navigator传值 在此就不记录react-na...

  • 学习react的第二天(1)

    react组件传值 为了防止数据乱流,react规定,不借助外力,只支持父子传值 父 -> 子 1. 在父元素中,...

  • react子组件向父组件传值

    相关资料:react 父组件怎么获取子组件的这个值React组件间信息传递方式react同级组件之间传值 • 父...

  • React Native中页面跳转、传值与回调

    React Native中页面跳转、传值与回调 标签(空格分隔): React React Native中页面跳转...

  • react传值

    一、父传子 1.将子组件引入父组件中 并在需要的位置嵌入 在嵌入的组件上绑定自定义属性例如: 子组件如何接收 (...

  • react传值

    一、父传子 子组件如何接收 (this.props)

  • React传值

    一、父传子 1.将子组件引入父组件中 并在需要的位置嵌入 在嵌入的组件上绑定自定义属性例如: 子组件如何接收 (...

网友评论

      本文标题:react隔代传值

      本文链接:https://www.haomeiwen.com/subject/ekrsrktx.html