From 124de7562d36a51d1eccc3e0a2faef52b67979b4 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 6 May 2017 16:01:14 +0100 Subject: [PATCH] Add 'advanced use' and 'style' docs Fix #450 --- README.md | 35 +++--- docs/apis/StyleSheet.md | 9 +- docs/guides/advanced.md | 104 +++++++++++++++ docs/guides/getting-started.md | 28 ++++- docs/guides/style.md | 210 ++++++++++++++++++++++--------- docs/static/components.png | Bin 12627 -> 0 bytes docs/static/styling-strategy.png | Bin 39131 -> 0 bytes 7 files changed, 294 insertions(+), 92 deletions(-) create mode 100644 docs/guides/advanced.md delete mode 100644 docs/static/components.png delete mode 100644 docs/static/styling-strategy.png diff --git a/README.md b/README.md index a51134de..ba236889 100644 --- a/README.md +++ b/README.md @@ -18,35 +18,31 @@ Browser support: Chrome, Firefox, Safari >= 7, IE 10, Edge. "React Native for Web" is a project to bring React Native's building blocks and touch handling to the Web. [Read more](#why). -Browse the UI Explorer to see React Native [examples running on -Web](https://necolas.github.io/react-native-web/storybook/). Or try it out -online with [React Native for Web: Playground](https://www.webpackbin.com/bins/-KgucwxRbn7HRU-V-3Bc). +Browse the [UI Explorer](https://necolas.github.io/react-native-web/storybook/) +to see React Native examples running on Web. Or try it out online with [React +Native for Web: Playground](https://www.webpackbin.com/bins/-KgucwxRbn7HRU-V-3Bc). ## Quick start To install in your app: ``` -npm install --save react@15.4 react-dom@15.4 react-native-web +npm install --save react@15.5 react-dom@15.5 react-native-web ``` Read the [Getting Started](docs/guides/getting-started.md) guide. -Alternatively, you can quickly setup a local project -using [create-react-app](https://github.com/facebookincubator/create-react-app) -(which supports `react-native-web` out-of-the-box once installed) and -[react-native-web-starter](https://github.com/grabcode/react-native-web-starter). - ## Documentation Guides: * [Getting started](docs/guides/getting-started.md) +* [Style](docs/guides/style.md) * [Accessibility](docs/guides/accessibility.md) * [Direct manipulation](docs/guides/direct-manipulation.md) * [Internationalization](docs/guides/internationalization.md) +* [Advanced use](docs/guides/advanced.md) * [Known issues](docs/guides/known-issues.md) -* [Style](docs/guides/style.md) Exported modules: @@ -87,17 +83,16 @@ Exported modules: There are many different teams at Twitter building web applications with React. We want to share React components, libraries, and APIs between teams…much like the OSS community tries to do. At our scale, this involves dealing with -multiple, inter-related problems including: a common way to handle style, -animation, touch, viewport adaptation, accessibility, themes, RTL layout, and -server-rendering. +multiple, inter-related problems including: component styles, animation, touch +interactions, layout adaptation, accessibility, RTL layout, theming, and build- +or server-rendering. This is hard to do with React DOM, as the components are essentially the same low-level building blocks that the browser provides. However, React Native -avoids, solves, or can solve almost all these problems facing Web teams. -Central to this is React Native's JavaScript style API (not strictly -"CSS-in-JS") which avoids the key [problems with -CSS](https://speakerdeck.com/vjeux/react-css-in-js) by giving up some of the -complexity of CSS. +avoids, solves, or can solve almost all these problems. Central to this is +React Native's JavaScript style API (not strictly "CSS-in-JS") which avoids the +key [problems with CSS](https://speakerdeck.com/vjeux/react-css-in-js) by +giving up some of the complexity of CSS. ## Example code @@ -140,11 +135,11 @@ AppRegistry.runApplication('MyApp', { rootTag: document.getElementById('react-ro ## Related projects -* [react-native-web-starter](https://github.com/grabcode/react-native-web-starter) * [react-native-web-player](https://github.com/dabbott/react-native-web-player) +* [react-native-web-starter](https://github.com/grabcode/react-native-web-starter) +* [react-native-web-webpack](https://github.com/ndbroadbent/react-native-web-webpack) * [reactxp](https://github.com/microsoft/reactxp) * [react-web](https://github.com/taobaofed/react-web) -* [react-native-web-webpack](https://github.com/ndbroadbent/react-native-web-webpack) ## License diff --git a/docs/apis/StyleSheet.md b/docs/apis/StyleSheet.md index ec441c55..bf79a0bc 100644 --- a/docs/apis/StyleSheet.md +++ b/docs/apis/StyleSheet.md @@ -1,9 +1,10 @@ # StyleSheet The `StyleSheet` abstraction converts predefined styles to (vendor-prefixed) -CSS without requiring a compile-time step. Some styles cannot be resolved -outside of the render loop and are applied as inline styles. Read more about -[how to style your application](../guides/style.md). +CSS without requiring a compile-time step. Styles that cannot be resolved +outside of the render loop (e.g., dynamic positioning) are usually applied as +inline styles. Read more about [how to style your +application](../guides/style.md). ## Methods @@ -15,7 +16,7 @@ Each key of the object passed to `create` must define a style object. Flattens an array of styles into a single style object. -**renderToString**: function +(web) **renderToString**: function Returns a string of the stylesheet for use in server-side rendering. diff --git a/docs/guides/advanced.md b/docs/guides/advanced.md new file mode 100644 index 00000000..f3f235de --- /dev/null +++ b/docs/guides/advanced.md @@ -0,0 +1,104 @@ +# Advanced use + +## Use with existing React DOM components + +React Native for Web exports a web-specific module called `createDOMElement`, +which can be used to wrap React DOM components. This allows you to use React +Native's accessibility and style optimizations. + +In the example below, `Video` will now accept common React Native props such as +`accessibilityLabel`, `accessible`, `style`, and even the Responder event +props. + +```js +import { createDOMElement } from 'react-native'; + +const Video = (props) => createDOMElement('video', props); +``` + +This also works with composite components defined in your existing component +gallery or dependencies ([live example](https://www.webpackbin.com/bins/-KiTSGFw3fB9Szg7quLI)). + +```js +import RaisedButton from 'material-ui/RaisedButton'; +import { createDOMElement, StyleSheet } from 'react-native'; + +const CustomButton = (props) => createDOMElement(RaisedButton, { + ...props, + style: [ styles.button, props.style ] +}); + +const styles = StyleSheet.create({ + button: { + padding: 20 + } +}); +``` + +Remember that React Native styles are not the same as React DOM styles, and +care needs to be taken not to pass React DOM styles into your React Native +wrapped components. + +## Use as a library framework + +The React Native (for Web) building blocks can be used to create higher-level +components and abstractions. In the example below, a `styled` function provides +an API inspired by styled-components ([live +example](https://www.webpackbin.com/bins/-KjT9ziwv4O7FDZdvsnX)). + +```js +const { createDOMElement, StyleSheet } = ReactNative; + +/** + * styled API + */ +const styled = (Component, styler) => { + const isDOMComponent = typeof Component === 'string'; + + class Styled extends React.Component { + static contextTypes = { + getTheme: React.PropTypes.func + }; + + render() { + const theme = this.context.getTheme && this.context.getTheme(); + const localProps = { ...this.props, theme }; + const nextProps = { ...this.props } + const style = typeof styler === 'function' ? styler(localProps) : styler; + nextProps.style = [ style, this.props.style ]; + + return ( + isDOMComponent + ? createDOMElement(Component, nextProps) + : + ); + } + } + return Styled; +} + +const styles = StyleSheet.create({ + container: { + alignItems: 'center', + backgroundColor: '#2196F3', + flex: 1, + justifyContent: 'center' + } +}); + +const StyledView = styled(View, styles.container); +``` + +## Use with react-sketchapp + +Use with [react-sketchapp](http://airbnb.io/react-sketchapp/) requires that you +alias `react-native` to `react-sketchapp`. This will allow you to render your +existing React Native components in Sketch. Sketch-specific components like +`Artboard` should be imported from `react-sketchapp`. + +If you're using `skpm`, you can rely on an [undocumented +feature](https://github.com/sketch-pm/skpm/blob/master/lib/utils/webpackConfig.js) +which will merge your `webpack.config.js`, `.babelrc`, or `package.json` Babel +config into its internal webpack config. The simplest option may be to use the +[babel-plugin-module-alias](https://www.npmjs.com/package/babel-plugin-module-alias) +and configure it in your `package.json`. diff --git a/docs/guides/getting-started.md b/docs/guides/getting-started.md index 607259e6..d68d17c9 100644 --- a/docs/guides/getting-started.md +++ b/docs/guides/getting-started.md @@ -1,5 +1,14 @@ # Getting started +This guide will help you to correctly configure build and test tools to work +with React Native for Web. + +Alternatively, you can quickly setup a local project using +[create-react-app](https://github.com/facebookincubator/create-react-app) +(which supports `react-native-web` out-of-the-box once installed), +[react-native-web-starter](https://github.com/grabcode/react-native-web-starter), +or [react-native-web-webpack](https://github.com/ndbroadbent/react-native-web-webpack). + It is recommended that your application provide a `Promise` and `Array.from` polyfill. @@ -76,10 +85,6 @@ module.exports = { } ``` -A more complex example setup for web apps can be found in various starter kits -(e.g., create-react-app and -[react-native-web-webpack](https://github.com/ndbroadbent/react-native-web-webpack)) - Please refer to the Webpack documentation for more information. ## Jest @@ -144,8 +149,8 @@ AppRegistry.runApplication('App', { }) ``` -Rendering within `ReactDOM.render` also works when introduce `react-native-web` -to an existing web app, but it is not recommended oherwise. +Rendering within `ReactDOM.render` also works when introducing +`react-native-web` to an existing web app, but otherwise it is not recommended. ## Server-side rendering @@ -164,4 +169,15 @@ AppRegistry.registerComponent('App', () => AppContainer) // prerender the app const { element, stylesheet } = AppRegistry.getApplication('App', { initialProps }); const initialHTML = ReactDOMServer.renderToString(element); + +// construct HTML document +const document = ` + + + +${stylesheet} + + +${initialHTML} +` ``` diff --git a/docs/guides/style.md b/docs/guides/style.md index 7d486aea..8cc7c3c3 100644 --- a/docs/guides/style.md +++ b/docs/guides/style.md @@ -1,73 +1,90 @@ # Style -React Native for Web relies on JavaScript to define styles for your -application. This allows you to avoid issues arising from the [7 deadly sins of -CSS](https://speakerdeck.com/vjeux/react-css-in-js): +React Native relies on JavaScript to define and resolve the styles of your +application. React Native for Web implements the React Native style API in a +way that avoids *all* the [problems with CSS at +scale](https://speakerdeck.com/vjeux/react-css-in-js): -1. Global namespace -2. Dependency hell +1. No local variables +2. Implicit dependencies 3. No dead code elimination 4. No code minification 5. No sharing of constants 6. Non-deterministic resolution -7. Lack of isolation +7. No isolation + +At the same time, it has several benefits: + +1. Simple API and expressive subset of CSS +2. Generates CSS; the minimum required +3. Good runtime performance +4. Support for static and dynamic styles +5. Support for RTL layouts +6. Easy pre-rendering of critical CSS ## Defining styles -Styles should be defined outside of the component: +Styles should be defined outside of the component. Using `StyleSheet.create` is +optional but provides the best performance (by relying on generated CSS +stylesheets). Avoid creating unregistered style objects. ```js -class Example extends React.Component {} - const styles = StyleSheet.create({ heading: { color: 'gray', fontSize: '2rem' }, text: { - color: 'gray', - fontSize: '1.25rem' + marginTop: '1rem', + margin: 10 } }) ``` -Using `StyleSheet.create` is optional but provides the best performance -(`style` is resolved to CSS stylesheets). Avoid creating unregistered style -objects. - -The attribute names and values are a subset of CSS. See the `style` -documentation of individual components. +See the `style` documentation of individual components for supported properties. ## Using styles -All the React Native components accept a `style` attribute. +All the React Native components accept a `style` property. The value can be a +registered object, a plain object, or an array. ```js - +// registered object + +// plain object + + +// array of registered or plain objects + ``` -A common pattern is to conditionally add style based on a condition: +The array syntax will merge styles from left-to-right as normal JavaScript +objects, and can be used to conditionally apply styles: ```js -// either ``` +When styles are registered with `StyleSheet.create`, the return value is a +number and not a style object. This is important for performance optimizations, +but still allows you to merge styles in a deterministic manner at runtime. If +you need access to the underlying style objects you need to use +`StyleSheet.flatten` (but be aware that this is not the optimized path). + ## Composing styles -In order to let a call site customize the style of your component children, you -can pass styles around. Use `View.propTypes.style` and `Text.propTypes.style` in -order to make sure only valid styles are being passed. +To let other components customize the style of a component's children you can +expose a prop so styles can be explicitly passed into the component. ```js class List extends React.Component { static propTypes = { - style: View.propTypes.style, - elementStyle: View.propTypes.style, + style: ViewPropTypes.style, + elementStyle: ViewPropTypes.style, } render() { @@ -90,56 +107,125 @@ In another file: You also have much greater control over how styles are composed when compared to using class names. For example, you may choose to accept a limited subset -of style props in the component's API, and control when they are applied: +of style props in the component's API, and control when they are applied. -```js -class List extends React.Component { - static propTypes = { - children: React.PropTypes.any, - // limit which styles are accepted - style: React.PropTypes.shape({ - borderColor: View.propTypes.borderColor, - borderWidth: View.propTypes.borderWidth - }) - } +## How styles are resolved - render() { - return ( - - ) - } -} +React Native style resolution is deterministic and slightly different from CSS. + +In the following HTML/CSS example, the `.margin` selector is defined last in +the CSS and takes precedence over the previous rules, resulting in a margin of +`0, 0, 0, 0`. + +```html + +
``` -## Media Queries +But in React Native the most *specific* style property takes precedence, +resulting in margins of `10, 0, 20, 0`. + +```js +const style = [ + { marginTop: 10 }, + { marginBottom: 20 }, + { margin: 0 } +]; + +const Box = () => +``` + +## Implementation details + +React Native for Web transforms React Native styles into React DOM styles. Any +styles defined using `StyleSheet.create` will ultimately be rendered using CSS +class names. + +React Native for Web introduced a novel strategy to achieve this. Each rule is +broken down into declarations, properties are expanded to their long-form, and +the resulting key-value pairs are mapped to unique "atomic CSS" class names. + +Input: + +```js +const Box = () => + +const styles = StyleSheet.create({ + box: { + margin: 0 + } +}); +``` + +Output: + +```html + + +
+``` + +This ensures that CSS order doesn't impact rendering and CSS rules are +efficiently deduplicated. Rather than the total CSS growing in proportion to +the number of *rules*, it grows in proportion to the number of *unique +declarations*. As a result, the DOM style sheet is only written to when new +unique declarations are defined and it is usually small enough to be +pre-rendered and inlined. + +Class names are deterministic, which means that the resulting CSS and HTML is +consistent across builds – important for large apps using code-splitting and +deploying incremental updates. + +At runtime registered styles are resolved to DOM style props and memoized. +Any dynamic styles that contain declarations previously registered as static +styles can also be converted to CSS class names. Otherwise, they render as +inline styles. + +All this allows React Native for Web to support the rich functionality of React +Native styles (including RTL layouts and `setNativeProps`) while providing one +of the [fastest](https://github.com/necolas/react-native-web/blob/master/performance/README.md), +safest, and most efficient styles-in-JavaScript solutions. + +## FAQs + +### What about Media Queries? `StyleSheet.create` is a way of defining the styles your application requires; it does not concern itself with _where_ or _when_ those styles are applied to elements. -There are various React libraries wrapping JavaScript Media Query API's, e.g., +Media Queries may not be most appropriate for component-based designs. React +Native provides the `Dimensions` API and `onLayout` props. If you do need Media +Queries, using the `matchMedia` DOM API has the benefit of allowing you to swap +out entire components, not just styles. There are also many React libraries +wrapping JavaScript Media Query API's, e.g., +[react-media](https://github.com/reacttraining/react-media), [react-media-queries](https://github.com/bloodyowl/react-media-queries), [media-query-fascade](https://github.com/tanem/media-query-facade), or -[react-responsive](https://github.com/contra/react-responsive). This has the -benefit of co-locating breakpoint-specific DOM and style changes. +[react-responsive](https://github.com/contra/react-responsive). -## Pseudo-classes and pseudo-elements +### What about pseudo-classes and pseudo-elements? Pseudo-classes like `:hover` and `:focus` can be implemented with events (e.g. `onFocus`). Pseudo-elements are not supported; elements should be used instead. -### Reset +### Do I need a CSS reset? -You **do not** need to include a CSS reset or -[normalize.css](https://necolas.github.io/normalize.css/). +No. React Native for Web includes a very small CSS reset that removes unwanted +User Agent styles from (pseudo-)elements beyond the reach of React (e.g., +`html`, `body`) or inline styles (e.g., `::-moz-focus-inner`). The rest is +handled at the component-level. -React Native for Web includes a very small CSS reset taken from normalize.css. -It removes unwanted User Agent styles from (pseudo-)elements beyond the reach -of React (e.g., `html`, `body`) or inline styles (e.g., `::-moz-focus-inner`). +### What about using DevTools? + +It's recommended that you rely more on React DevTools and live/hot-reloading +rather than inspecting and editing the DOM directly. diff --git a/docs/static/components.png b/docs/static/components.png deleted file mode 100644 index 66da579a808b3e61df3291fa7f05bdadbad74d22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12627 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 diff --git a/docs/static/styling-strategy.png b/docs/static/styling-strategy.png deleted file mode 100644 index 850ef6776d48d5c45b6e85db94646fe270ed1526..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39131 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