Changelog History
Page 1
-
v5.3.0 Changes
May 04, 2021💅 Pass
elementToBeCreated
as a third parameter toshouldForwardProp
so that the user-specified function can decide whether to pass through props based on whether the created element will be a tag or another component. (see #3436)🛠 Fix React Native components accepts function as style prop. (see #3389)
-
v5.2.2 Changes
March 30, 2021💅 For React Native based components, pass
testID
down to the native component if specified for an easier time testing. (see #3365)💅 Enable users of the babel macro to customize the styled-components import with
importModuleName
(see #3422)[fix] COMPLEX_SELECTOR_PREFIX.includes wasn't transpiled (see #3397)
-
v5.2.1 Changes
October 30, 2020 -
v5.2.0 Changes
September 04, 2020💅 Make sure
StyleSheetManager
renders all styles in iframe / child windows (see #3159) thanks @eramdam!💅 Rework how components self-reference in extension scenarios (see #3236); should fix a bunch of subtle bugs around patterns like
& + &
🛠 Fix
keyframes
not receiving a modified stylis instance when using something likestylis-plugin-rtl
(see #3239)🐎 Big performance gain for components using style objects (see #3239)
We no longer emit dynamic classNames for empty rulesets, so some className churn may occur in snapshots
⚙ Preallocate global style placement to ensure cGS is consistently inserted at the top of the stylesheet; note that this is done in runtime order so, if you have multiple cGS that have overlapping styles, ensure they're defined in code in the sequence you would want them injected (see #3239)
➕ Add "engines" to package.json (currently set to Node 10, the oldest supported LTS distribution) (see #3201) thanks @MichaelDeBoey!
👍 Allow
DISABLE_SPEEDY
to be set tofalse
to enable speedy mode in non-production environments (see #3289) thanks @FastFedora!💅 Enable new style rules can be inserted in the middle of existing sheet when rendering on client after rehydrate.
GroupIDAllocator
is now changed to findnextFreeGroup
by checkingreverseRegister
, instead of setting it to the end of existing groups. (see #3233) thanks @mu29!
-
v5.2.0-test.10 Changes
August 31, 2020We are planning to release 5.2 on September 2/3, please help us test!
yarn add [email protected]
⚙ Preallocate global style placement to ensure cGS is consistently inserted at the top of the stylesheet; note that this is done in runtime order so, if you have multiple cGS that have overlapping styles, ensure they're defined in code in the sequence you would want them injected (see #3239)
💅 NOTE: This is a behavioral change and might require adjustment in your codebase if you have many
createGlobalStyle
components in use. We do not think it will affect the majority of projects other than fix existing bugs.💅
createGlobalStyle
is nowReact.StrictMode
compliant💅 Make sure
StyleSheetManager
renders all styles in iframe / child windows (see #3159) thanks @eramdam!💅 Rework how components self-reference in extension scenarios (see #3236); should fix a bunch of subtle bugs around patterns like
& + &
🛠 Fix
keyframes
not receiving a modified stylis instance when using something likestylis-plugin-rtl
(see #3239)🐎 Big performance gain for components using style objects (see #3239)
We no longer emit dynamic classNames for empty rulesets, so some className churn may occur in snapshots
➕ Add "engines" to package.json (currently set to Node 10, the oldest supported LTS distribution) (see #3201) thanks @MichaelDeBoey!
-
v5.1.1 Changes
April 07, 2020🆕 New Functionality
- 💅 Implement
shouldForwardProp
API for native and primitive platforms, which was previously missing in [v5.1.0] (see #3093)
🚀 This has been released under a patch bump instead of a minor, since it's only been missing from Native-support.
🛠 Bugfixes
- 💅 Implement
-
v5.1.0 Changes
April 07, 2020🆕 New Functionality
➕ Add
shouldForwardProp
API (almost the same as emotion's, just a slightly different usage pattern); #3006💅 Sometimes when composing multiple higher-order components together, it's possible to get into scenarios when multiple layers consume props by the same name. In the past we've introduced various workarounds for popular props like
"as"
but this power-user API allows for more granular customization of what props are passed down to descendant component children when using thestyled()
HOC wrapper.When combined with other APIs like
.attrs()
this becomes a very powerful constellation of abilities.Here's how you use it:
const Comp = styled('div').withConfig({ shouldForwardProp: (prop, defaultValidatorFn) =\> !['filterThis'].includes(prop), })` color: red;`;render(\<Comp filterThis="abc" passThru="def" /\>); # Renders: \<div className="[generated]" passThru="def"\>\</div\>
0️⃣ The second argument
defaultValidatorFn
is what we use internally to validate props based on known HTML attributes. It's provided so you can filter exactly what props you don't wish to pass and then fall-back to the default filtering mechanism if desired.💅 Other methods on the
styled
HOC like.attrs
can be chained afterwithConfig()
, and before opening your template literal:const Comp = styled('div').withConfig({ shouldForwardProp: (prop, defaultValidatorFn) =\> !['filterThis'].includes(prop), }).attrs({ className: 'foo' })` color: red;`;render(\<Comp filterThis="abc" passThru="def" /\>); # Renders: \<div className="[generated] foo" passThru="def"\>\</div\>
Thanks @stevesims and all that contributed!
➕ Add "transient props" API; #3052
Think of transient props as a lightweight, but complementary API to
shouldForwardProp
. Because styled-components allows any kind of prop to be used for styling (a trait shared by most CSS-in-JS libraries, but not the third party library ecosystem in general), adding a filter for every possible prop you might use can get cumbersome.Transient props are a new pattern to pass props that are explicitly consumed only by styled components and are not meant to be passed down to deeper component layers. Here's how you use them:
const Comp = styled.div`color: ${props =\> props.$fg || 'black'};`;render(\<Comp $fg="red"\>I'm red!\</Comp\>);
Note the dollar sign (
$
) prefix on the prop; this marks it as transient and styled-components knows not to add it to the rendered DOM element or pass it further down the component hierarchy.🛠 Bugfixes
🛠 Fix slow SSR Rehydration for malformed CSS and increase fault-tolerance (see #3018)
💅 Change isPlainObject (internal method) to support objects created in a different context (see #3068) thanks @keeganstreet!
➕ Add support for the
<video disablePictureInPicture>
(see #3058) thanks @egdbear! -
v5.0.1 Changes
February 04, 2020➕ Added useTheme hook to named exports for react native (#2982)
🐎 Performance enhancements
- Refactored hashing function that is a bit faster in benchmarks (#2983)
- Fixed a bitwise math issue that was causing SSR performance degradations due to how we allocate typed arrays under the hood (#2996)
➕ Added some helpful new dev-time warnings for antipatterns
-
v5.0.0 Changes
July 01, 2019🚀 Read the v5 release announcement!
- 19% smaller bundle size
- 18% faster client-side mounting
- 💅 17% faster updating of dynamic styles
- 45% faster server-side rendering
- 👍 RTL support
💅 NOTE: At this time we recommend not using
@import
inside ofcreateGlobalStyle
. We're working on better behavior for this functionality but it just doesn't really work at the moment and it's better if you just embed these imports in your HTML index file, etc.💅
StyleSheetManager
enhancements- you can now supply stylis plugins like stylis-plugin-rtl;
<StyleSheetManager stylisPlugins={[]}>...</StyleSheetManager>
disableVendorPrefixes
removes autoprefixing if you don't need legacy browser support;<StyleSheetManager disableVendorPrefixes>...</StyleSheetManager>
disableCSSOMInjection
forces using the slower injection mode if other integrations in your runtime environment can't parse CSSOM-injected styles;<StyleSheetManager disableCSSOMInjection>...</StyleSheetManager>
- you can now supply stylis plugins like stylis-plugin-rtl;
✂ Remove deprecated attrs "subfunction" syntax variant
styled.div.attrs({ color: p => p.color });
should become
styled.div.attrs(p => ({ color: p.color }));
You can still pass objects to
attrs
but individual properties shouldn't have functions that receive props anymore.🛠 Fix attrs not taking precedence over props when overriding a given prop
🚀 (ReactNative) upgrade css-to-react-native to v3 (changelog)
- Removed support for unitless line height in font shorthand
💅 Replace
merge-anything
withmixin-deep
to save some bytes (this is what handles merging ofdefaultProps
between folded styled components); this is inlined into since the library is written in IE-incompatible syntax🛠 Fix certain adblockers messing up styling by purposefully not emitting the substring "ad" (case-insensitive) when generating dynamic class names
🛠 Fix regressed behavior between v3 and v4 where className was not correctly aggregated between folded
.attrs
invocations🛠 Fix support for styling custom elements (https://github.com/styled-components/styled-components/pull/2819)
-
v5.0.0-rc.3 Changes
December 30, 2019🚀 This should be the last RC before general v5 release in a week or two!
📦 NOTE: If you've been testing this
stylisPlugins
functionality with thestylis-rtl
plugin, please switch fromstylis-rtl
tostylis-plugin-rtl
.- 💅 make useTheme cleaner (#2879) props @sayjeyhi
- unnecessary flattening and interleave of css without interpolations @vepor
- 💅 switch back to mainline hoist-non-react-statics (#2934) …
- 💅 use funding field instead of post install script (#2931) props @koba04
- 🛠 fix usage of nested stylesheetmanagers in SSR
- 💅 expose version in API (#2888) props @jamesarmenta
- 💅 refactor stylis management (#2936)