Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

React高阶组件 #6

Open
twosugar opened this issue Apr 22, 2019 · 0 comments
Open

React高阶组件 #6

twosugar opened this issue Apr 22, 2019 · 0 comments

Comments

@twosugar
Copy link
Owner

twosugar commented Apr 22, 2019

react的高阶组件可以理解为,将一个组件作为参数传入一个函数,最后return一个组件。在函数中我们可以做一系列操作。参考文章

先写一个简单的高阶组件

//simpleHoc.js

import React, {Component} from 'react';

const simpleHoc = ItemComponent => {
  console.log('simpleHoc')
  return class extends Component {
    render() {
      return <ItemComponent />
    }
  }
}

export default simpleHoc;

//usual.jsx

import React, {Component} from 'react';
import simpleHoc from './simpleHoc';

class Usual extends Component {
  constructor(props) {
    super()
  }

  render() {
    console.log('Usual组件')
    return <div>我是Usual组件</div>
  }
}

export default simpleHoc(Usual);

最后可以看到浏览器打印:"simpleHoc","Usual组件"

高阶组件获取子组件状态

//simpleHoc.js

import React, {Component} from 'react';

const simpleHoc = ItemComponent => {
  console.log('simpleHoc')
  return class extends Component {
    componentDidMount() {
      console.log(this.instanceComponent, 'instanceComponent');
    }
    
    render() {
      return <ItemComponent
      ref={instanceComponent => this.instanceComponent = instanceComponent}
      />
    }
  }
}

export default simpleHoc;

//usual.jsx

import React, {Component} from 'react';
import simpleHoc from './simpleHoc';

class Usual extends Component {
  constructor(props) {
    super()
    this.state = {
      a: '1'
    }
  }

  render() {
    console.log('Usual组件')
    return <div>我是Usual组件</div>
  }
}

export default simpleHoc(Usual);

图片2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant