-
Notifications
You must be signed in to change notification settings - Fork 1.3k
[Question] Clarification of example. #5
Comments
Thanks for the feedback!
The fixed ES5 example looks like this: mapProps(function(props) {
return Object.assign({}, props, {
increment: function() { props.setCounter(function(n) { return n + 1; }); },
decrement: function() { props.setCounter(function(n) { return n - 1; }); },
});
}) As you can see, ES2015 features make a big difference here, especially arrow functions. I think it's fairly safe to assume that most people who would be interested in using Recompose will be mostly familiar with ES2015 features, since Babel is the official solution for compiling JSX. However, I agree with you that for someone who's not as familiar with things like ES2015, or currying, or function composition, or higher-order components... it may be all a bit overwhelming. Perhaps when I have the time to build a proper docs site, we can do something similar to what @gaearon did with his code snippets for React DnD, which can be toggled between ES5/ES6/ES7. |
This is pretty accurate, yes. You can't return an object inline with arrow functions since the compiler can't differentiate between // won't work
const vector = (x, y) => { x, y }
//works
const vector = (x, y) => ({ x, y }) The Notion mapProps(function(props) {
var setCounter = props.setCounter
var rest = Array.prototype.slice.call(arguments, 1); // rest of the properties of `props`
}) You can just get the properties you want to modify and create a new object that merges the existing properties with the modified ones. If it helps, here would be the ES5 non-immutable way: mapProps(function(props) {
var setCounter = props.setCounter
var decrement = function () {
setCounter(function (n) {
return n - 1
})
}
var increment = function () {
setCounter(function (n) {
return n + 1
})
}
props.increment = increment
props.decrement = decrement
return props
}) |
@queckezz Ooh, I know you're trying to be helpful, but please don't modify the props object, even in an example. Don't want anyone to get confused and think that's okay :) Here's that snippet updated to use a new object: mapProps(function(ownerProps) {
var setCounter = ownerProps.setCounter
var decrement = function () {
return setCounter(function (n) {
return n - 1
})
}
var increment = function () {
return setCounter(function (n) {
return n + 1
})
}
var props = {}
props.increment = increment
props.decrement = decrement
return props
}) |
Sorry to ask you this directly but would you mind clarifying a bit of your example?
So far I have this when translated to ES5 by hand.
I have three questions.
...
will spead the values inrest
into the object but I'm really confused as to whererest
comes from.I don't think many people will find it easy to understand what this example does. Might want to cool it with the
({(({}) => ({}))})
and some of the more advanced ES2015 features.Many thanks.
The text was updated successfully, but these errors were encountered: