问题
I'm using styled-components and polished for darkening/lightening the colors.
Here's what I have now working:
colors = ['#eee', '#ccc', '#ddd'];
const calcBorderColor = ({ currentPosition }) => {
const color = colors[(currentPosition) % colors.length];
return color;
};
const Choice = styled.button`
border-color: ${calcBorderColor};
`;
Where I'm stuck is here:
&:hover {
border-color: ${darken(0.1, calcBorderColor)};
}
That hover styling is error with Passed an incorrect argument to a color function, please pass a string representation of a color.
How can I use polished darken along with the calcBorderColor function?
回答1:
You are only getting the error when using the darken function because it expects a string as second argument and instead you are passing the function declaration of calcBorderColor that if you log it, you could see is this:
calcBorderColor(_ref) {
var currentPosition = _ref.currentPosition;
var color = colors[currentPosition % colors.length];
return color;
}
If you:
console.log(typeof calcBorderColor);
You will get it is of type function.
This come because polished library functions are staticly typed by using Flow. And you are not getting an error in the first border-color because Styled Components is skipping to render the function declaration, probably leaving the default border-color of the button element.
So you need to pass as argument an object with the attribute currentPosition in both calls to the calcBorderColor function in order to make it usable and avoid that error.
const Choice = styled.button`
border-color: ${calcBorderColor({currentPosition: 1})};
&:hover {
border-color: ${darken(0.1, calcBorderColor({ currentPosition: 0}))};
}
`;
来源:https://stackoverflow.com/questions/51003397/with-styled-components-and-polish-how-to-include-a-function-as-the-color