Skip to content

Instantly share code, notes, and snippets.

@SmolinPavel
Last active April 2, 2019 19:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SmolinPavel/118cd5199101ed6c5f0b32d56c933621 to your computer and use it in GitHub Desktop.
Save SmolinPavel/118cd5199101ed6c5f0b32d56c933621 to your computer and use it in GitHub Desktop.
Mix of the legacy and new context API
import React, { Component, createContext } from 'react';
import PropTypes from 'prop-types';
const ExampleContext = createContext({ api: 'lorem ipsum' });
class New extends Component {
static contextType = ExampleContext;
render() {
const { name } = this.props;
const { api } = this.context;
return (
<div>
<h1>Hello, {name}</h1>
<p>
This example is using{' '}
<span style={{ fontStyle: 'italic', color: 'green' }}>{api}</span>
</p>
</div>
);
}
}
New.propTypes = {
name: PropTypes.string.isRequired
};
class Legacy extends Component {
render() {
const { name } = this.props;
const { api } = this.context;
return (
<div>
<h1>Hello, {name}</h1>
<p>
This example is using{' '}
<span style={{ fontStyle: 'italic', color: 'green' }}>{api}</span>
</p>
</div>
);
}
}
Legacy.propTypes = {
name: PropTypes.string.isRequired
};
Legacy.contextTypes = {
api: PropTypes.string
};
class Context extends Component {
getChildContext() {
return {
api: 'legacy api that will not be supported in future...'
};
}
render() {
return (
<ExampleContext.Provider
value={{ api: 'new api that will be supported in future...' }}>
<Legacy name='John Galt' />
<New name='John Galt' />
</ExampleContext.Provider>
);
}
}
Context.childContextTypes = {
api: PropTypes.string
};
export default Context;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment