Skip to content

Instantly share code, notes, and snippets.

@deniztetik
Created July 8, 2018 01:41
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 deniztetik/38fd0eb47d892abc75f0bb887251f20e to your computer and use it in GitHub Desktop.
Save deniztetik/38fd0eb47d892abc75f0bb887251f20e to your computer and use it in GitHub Desktop.
// ./src/MessageContainer.js
import React, { Component } from 'react';
import Name from './Hello';
const MessageContext = React.createContext();
class MessageContainer extends Component {
state = {
name: 'Angular',
setName: this.setName,
}
async componentDidMount() {
await this.setName('React');
}
/* Put actions here */
async setName(name) {
const nameResponse = await delay(name, 0);
this.setState({ name: nameResponse });
}
render() {
return (
<MessageContext.Provider value={this.state}>
<Name />
</MessageContext.Provider>
);
}
}
export default MessageContainer;
export function withMessageContext(Component) {
return (props) => (
<MessageContext.Consumer>
{contextProps =>
/* override contextprops if prop of same name is manually added */
<Component {...contextProps} {...props} />
}
</MessageContext.Consumer>
);
}
// simulate an API Call
const delay = (value, time = 0) =>
new Promise((resolve) =>
setTimeout(() => resolve(value), time)
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment