Changelog History
Page 4
-
v4.2.1 Changes
May 30, 2019โ Remove className usage checker dev utility due to excessive false-positive noise in certain runtime environments like next.js and the related warning suppression prop (see #2563).
๐ Attach displayName to forwardRef function as described in React docs (see #2508).
๐ Compatibility with react-native-web 0.11 (see #2453).
โ Add stack trace to .attrs warning (see #2486).
๐ Fix functions as values for object literals. (see 2489)
โ Remove validation in Babel macro, by @mAAdhaTTah (see #2427)
-
v4.2.0 Changes
March 23, 2019๐ Reduced GC pressure when using component selector styles. (see #2424).
โ Add svg tag
marker
to domElements.js (see #2389)๐ Make the
GlobalStyleComponent
created bycreateGlobalStyle
call the base constructor withprops
(see #2321).๐ Move to Mono repository structure with lerna @imbhargav5 (see #2326)
๐ Expose
StyleSheetContext
andStyleSheetConsumer
for you fancy babes doing wild stuff๐ Filter
suppressClassNameWarning
to not to pass down to the wrapped components @taneba (see #2365)๐ Fix an edge case where React would break streaming inside
<textarea>
elements, which have special child behavior and aren't a suitable place to inject a style tag (see #2413)
-
v4.1.3 Changes
December 17, 2018 -
v4.1.2 Changes
November 28, 2018๐ Fix function-form attrs to receive the full execution context (including theme) (see #2210)
๐ Adjust
innerRef
deprecation warning to not be fired if wrapping a custom component, since that underlying component may not be on forwardRef yet and actually using the prop (see #2211)๐ Expose the
ThemeConsumer
andThemeContext
exports for the native and primitives entries (see #2217)โ Remove
createGlobalStyle
multimount warning; Concurrent and Strict modes intentionally render the same component multiple times, which causes this warning to be triggered always even when usage is correct in the application (see #2216)๐ Folded components are now targettable via component selector as in v3 if you used the old
.extend
API (see #2239)๐ Don't treat uppercased strings as tag-like components and don't filter out props from them (see #2225)
-
v4.1.1 Changes
November 12, 2018- ๐ Put back the try/catch guard around a part of the flattener that sometimes receives undetectable SFCs (fixes an errand hard error in an edge case)
-
v4.1.0 Changes
November 12, 2018๐ Performance optimization for fully static (no function interpolation) styled-components by avoiding using
ThemeConsumer
since it isn't necessary, by @mxstbr (see #2166)Allow disabling "speedy" mode via global
SC_DISABLE_SPEEDY
variable, by @devrelm (see #2185)
To make use of this, you can either set
SC_DISABLE_SPEEDY
in your app's entry file or use something likewebpack.DefinePlugin
to do it at build time:webpack.DefinePlugin({ SC_DISABLE_SPEEDY: true, });
- ๐ Attrs can now be passed a function (see #2200); thanks @oliverlaz for providing an early PoC PR for this!
e.g.:
styled.div.attrs(props => ({ 'aria-title': props.title }))``;
๐ Fix the
warnTooManyClasses
dev helper not being totally dead code eliminated in production (see #2200)๐ Deprecate functions as object keys for object-form attrs (see #2200)
e.g.:
styled.div.attrs({ 'aria-title': props => props.title })``; // bad styled.div.attrs(props => ({ 'aria-title': props.title }))``; // good
Support for this will be removed in styled-components v5. The primary impetus behind this change is to eliminate confusion around basic functions vs styled-components vs React components provided as values in the object-form attrs constructor, each of which has different handling behaviors. The single outer function to receive the props and then return a props object is conceptually simpler.
-
v4.0.3 Changes
October 30, 2018- ๐ Interpolating a styled component into a string now returns the static component selector (emotion cross-compat)
import styled from 'styled-components'; const Comp = styled.div` color: red; `; `${Comp}`; // .sc-hash
โ Add
suppressClassNameWarning
prop to disable warning when wrapping a React component withstyled()
and theclassName
isn't used, by @Fer0x (see #2156)๐ Expose ThemeContext to enable static contextType support for React 16.6, by @imbhargav5 (see #2152)
๐ Filter out invalid HTML attributes from
attrs
, by @Fer0x (see #2133)โ Add warning if an
attrs
prop is a function that returns an element, by @timswalling (see #2162)
-
v4.0.2 Changes
October 18, 2018- ๐ Handle an edge case where an at-rule was being supplied to the self-reference stylis plugin at an incorrect context setting, by @probablyup (see #2114)
-
v4.0.1 Changes
October 17, 2018โ Add suppressMultiMountWarning prop to disable warning on multiple cgs mount, by @imbhargav5 (see #2107)
๐ Fix self-reference replacement edge cases, by @probablyup (see #2109)
-
v4.0.0 Changes
October 15, 2018๐ This is a rollup of the highlights of beta 0-11 for convenience. See the migration guide for easy updating steps and the beta announcement blog for our summary of v4's changes, thought process, etc.
๐ New stuff
โ Add babel macro for full-featured interop with create react app v2+, by @lucleray (see #2032)
๐ฆ Expose
ThemeConsumer
component, context consumer render prop component from theReact.createContext
API if people are interested in using it rather than / in addition to thewithTheme
HOC, by @probablyupโ Add
createGlobalStyle
that returns a component which, when mounting, will apply global styles. This is a replacement for theinjectGlobal
API. It can be updated, replaced, removed, etc like any normal component and the global scope will update accordingly, by @JamieDixon @marionebl, @yjimk, and @imbhargav5 (see #1416)
const GlobalStyles = createGlobalStyle` html { color: 'red'; } `; // then put it in your React tree somewhere: // <GlobalStyles />
- โ Added a first-class API for rendering polymorphism via "as" prop. In most cases, this new prop will replace your need to use the
.withComponent
API. It allows you to control what underlying element or component is rendered at runtime, while not messing with the styles, by @probablyup (see #1962)
import { Link } from 'react-router' const Component = styled.div` color: red; ` // Examples <Component>Hello world!</Component> <Component as="span">Hello world!</Component> <Component as={Link} to="home">Hello world!</Component>
๐ฅ Breaking changes
๐ Fix how ampersand is handled in self-referential selector combinations, e.g.
& + &
(see #2071)โ Remove deprecated
consolidateStreamedStyles
API, by @probablyup (see #1906)โ Remove deprecated
jsnext:main
entry point from package.json, by @probablyup (see #1907)โ Remove deprecated
.extend
API, by @probablyup (see #1908)๐ Migrate to new context API, by @alexandernanberg (see #1894)
โ Remove TS typings; they are now to be found in DefinitelyTyped, by @probablyup. See https://github.com/styled-components/styled-components/issues/1778 for more information.
โ Add new
data-styled-version
attribute to generated<style>
tags to allow multiple versions of styled-components to function on the page at once without clobbering each other, by @probablyup
It's still highly recommended to use aliasing via your bundler to dedupe libraries like styled-components and react.
Keyframes is now implemented in a "lazy" manner: its styles will be injected with the render phase of components using them.
keyframes
no longer returns an animation name, instead it returns an object which has method.getName()
for the purpose of getting the animation name.๐ Migrate to use new
React.forwardRef
API, by @probablyup; note that this removes theinnerRef
API since it is no longer needed.๐ Implement
styled()
wrapper folding. In a nutshell, when you nest styled wrappers (e.g.styled(styled.div)
) the components are now folded such that only one is mounted that contains the merged styles of its ancestors. This is conceptually equivalent to the removed "extend" functionality, but without many of the downsides -- and it's automatic, by @probablyup (see #1962)
Developer experience improvements
- โ Add warning when component is not a styled component and cannot be referred via component selector, by @egdbear (see #2070)
When using CRA v2, import styled components from
styled-components/macro
instead to gain all the benefits of our babel plugin.โ Add a warning when wrapping a React component with
styled()
and theclassName
isn't used (meaning styling isn't applied), by @Fer0x (see #2073)๐ Tweak the styled components base component naming to look nicer in DevTools, by @probablyup (see #2012)
๐ Beef up the error message that sometimes occurs when multiple versions of styled components are used together and the StyleSheet instance can't be found, by @probablyup (see #2012)
Misc
- โ Add
enzymeFind
test utility to easily grab instances of a styled-component from enyzme mounted testing scenarios, by @probablyup (see #2049)
import { mount } from 'enzyme'; import React from 'react'; import styled from 'styled-components'; import { enzymeFind } from 'styled-components/test-utils'; const Thing = styled.div` color: red; `; const wrapper = mount( <div> <Thing isCool /> </div> ); const thing = enzymeFind(wrapper, Thing); // expect(thing.props()).toHaveProperty('isCool') etc
- ๐ Inline and optimize the static hoisting functionality to avoid a bundler bug and shed a bit of package weight, by @probablyup (see #2021