Skip to content

Instantly share code, notes, and snippets.

@elierotenberg
Last active August 29, 2015 14:21
Show Gist options
  • Save elierotenberg/f6386fbec5f88c337be7 to your computer and use it in GitHub Desktop.
Save elierotenberg/f6386fbec5f88c337be7 to your computer and use it in GitHub Desktop.
TransformProps
const TransformProps = (Component, transform) => class extends React.Component {
displayName = Component.displayName;
render() {
return <Component {...transform(this.props)}>;
}
};
const transform = (f) => (t) => {
r = {};
Object.keys(t).forEach((k) => r[k] = f(t[k], k));
return r;
};
TransformProps(class extends React.Component {
render() {
// all props values have been multiplied by 2
}
}, transform((x) => 2*x)); // simple transform: all props are multiplied by two
TransformProps(class extends React.Component {
render() {
// only two props: sum and mean
}
}, (props) => { // less trivial transform: new props are the sum and the mean of previous props
let sum = 0;
Object.keys(props).forEach((k) => sum += props[k]);
return { sum, mean: sum/Object.keys(props).length };
});
@elierotenberg
Copy link
Author

Very pure, very composable props transformer.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment