美文网首页
context 传统的类组件的写法和 hooks 写法

context 传统的类组件的写法和 hooks 写法

作者: 木易先生灬 | 来源:发表于2020-10-09 17:04 被阅读0次

react中的context是什么呢

Context 通过组件树提供了⼀个传递数据的⽅法,从⽽避免了在每⼀个层级⼿动的传递 props 属性。
⽂档也没具体给出context到底是什么,⽽是告诉我们context能⼲什么,也就是说,如果我们不想通过props实现组件树的逐层传递
数据,则可以使⽤context实现跨层级进⾏数据传递!

屏幕截图 2020-10-09 155912.png

创建Context,

ContextData.jsx ,通过 Provider 进行数据传递

import React, { Component } from 'react'
// 创建 Context 并导出
export const Context = React.createContext()
export class ContextData extends Component {
  constructor(props) {
    super(props)
    this.state = {
      users: [
        {
          name: '小明',
          age: 18,
          sex: '男',
        },
        {
          name: '小红',
          age: 16,
          sex: '女',
        },
        {
          name: '小王',
          age: 20,
          sex: '男',
        },
      ],
    }
  }
  render() {
    return (
      <Context.Provider value={this.state}>
        {this.props.children}
      </Context.Provider>
    )
  }
}

Middle.jsx

import React from 'react'
import Foo from './Foo'
import Bar from './Bar'

function Middle() {
  return (
    <div>
      <Foo></Foo>
      <Bar></Bar>
    </div>
  )
}

export default Middle

Foo.jsx, 类组件

方式一: 通过 Consumer 里面{放一个函数} 来获得 Context 的数据

import React, { Component } from 'react'
import {Context} from './ContextData'

export class Foo extends Component {
  render() {
    return (
      <Context.Consumer>
        {appContext=><div>Foo:{JSON.stringify(appContext.users[0])}</div>}
      </Context.Consumer>
    )
  }
}

export default Foo

Bar.jsx 函数式组件

方式二: 通过 useContext 传入创建的 Context

import React from 'react'
import {Context} from './ContextData'
function Bar() {
  const appContext = React.useContext(Context)
  return (
    <div>
      <p>Bar: {JSON.stringify(appContext.users[1])}</p>
    </div>
  )
}

export default Bar

Baz.jsx 类组件

方式三: 通过静态属性
static contextType = Context,
const appContext = this.context;

import React, { Component } from 'react'
import {Context} from './ContextData'
export default class Baz extends Component {
  static contextType = Context
  render() {
    const appContext = this.context;
    return (
      <div>
        {/* <p>这是一个懒加载...</p> */}
        Baz: {JSON.stringify(appContext.users[2])}
      </div>
    )
  }
}

浏览器显示结果

屏幕截图 2020-10-09 160646.png

相关文章

  • context 传统的类组件的写法和 hooks 写法

    react中的context是什么呢Context 通过组件树提供了⼀个传递数据的⽅法,从⽽避免了在每⼀个层级⼿动...

  • react Hooks

    技术胖博客 React Hooks 类与Hooks 写法对比 先来写一个最简单的有状体组件,点我们点击按钮时,点击...

  • ES6笔记

    定义组件的三种写法 传统写法 es6写法 stateless 的写法(推荐) const、var、let cons...

  • 2-useState

    Time: 20200126 函数组件中使用状态。 类组件写法 注意类组件的用法。 函数式组件写法 在事件调用中,...

  • vue3 + tsx 的几种写法(探索版)

    类组件写法 vue-class-component也是vue3提供的一个编译库。 个人更喜欢类组件写法,你喜欢什么...

  • vue一次倒入多个组件

    1.require.context() 1.场景:如页面需要导入多个组件,原始写法: import titleCo...

  • Python多继承的执行顺序

    经典类和新式类的写法: class A: #经典类(旧式类)写法..................clas...

  • ES 6(持续更新)

    ES 6 class 类 类和传统的构造函数对比//传统函数的写法function Point(x,y){ th...

  • react事件处理

    一,事件处理 写法:on+事件名称= {事件处理函数} 类组件触发写法on+事件名称 = 事件处理函数 ---...

  • ES2015 Class

    传统写法: ES2015写法: 1、constructor方法 constructor方法是类的默认方法,通过ne...

网友评论

      本文标题:context 传统的类组件的写法和 hooks 写法

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