diff --git a/examples/z-experimental-refresh/README.md b/examples/z-experimental-refresh/README.md new file mode 100644 index 0000000000000..078c5d65e90b5 --- /dev/null +++ b/examples/z-experimental-refresh/README.md @@ -0,0 +1,14 @@ +# z-experimental-refresh + +This is an **experimental** demo of React Fast Refresh. +Please do not use these features in your application or project (yet). + +## Usage + +Run the following command to get started: + +```bash +yarn dev +# or +npm run dev +``` diff --git a/examples/z-experimental-refresh/components/ClickCount.js b/examples/z-experimental-refresh/components/ClickCount.js new file mode 100644 index 0000000000000..9b736bc3decfa --- /dev/null +++ b/examples/z-experimental-refresh/components/ClickCount.js @@ -0,0 +1,15 @@ +import { useCallback, useState } from 'react' +import styles from './ClickCount.module.css' + +export default function ClickCount() { + const [count, setCount] = useState(0) + const increment = useCallback(() => { + setCount(v => v + 1) + }, [setCount]) + + return ( + + ) +} diff --git a/examples/z-experimental-refresh/components/ClickCount.module.css b/examples/z-experimental-refresh/components/ClickCount.module.css new file mode 100644 index 0000000000000..3cba6f351a456 --- /dev/null +++ b/examples/z-experimental-refresh/components/ClickCount.module.css @@ -0,0 +1,32 @@ +button.btn { + margin: 0; + border: 1px solid #d1d1d1; + border-radius: 5px; + padding: 0.5em; + vertical-align: middle; + white-space: normal; + background: none; + line-height: 1; + font-size: 1rem; + font-family: inherit; + transition: all 0.2s ease; +} + +button.btn { + padding: 0.65em 1em; + background: #0076ff; + color: #fff; + border: none; + cursor: pointer; + transition: all 0.2s ease; +} +button.btn:focus { + outline: 0; + border-color: #0076ff; +} +button.btn:hover { + background: rgba(0, 118, 255, 0.8); +} +button.btn:focus { + box-shadow: 0 0 0 2px rgba(0, 118, 255, 0.5); +} diff --git a/examples/z-experimental-refresh/global.css b/examples/z-experimental-refresh/global.css new file mode 100644 index 0000000000000..5827ef085ef3a --- /dev/null +++ b/examples/z-experimental-refresh/global.css @@ -0,0 +1,41 @@ +body { + font-family: 'SF Pro Text', 'SF Pro Icons', 'Helvetica Neue', 'Helvetica', + 'Arial', sans-serif; + padding: 20px 20px 60px; + max-width: 680px; + margin: 0 auto; + font-size: 16px; + line-height: 1.65; + word-break: break-word; + font-kerning: auto; + font-variant: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + hyphens: auto; +} + +h2, +h3, +h4 { + margin-top: 1.5em; +} + +code, +pre { + font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, + Bitstream Vera Sans Mono, Courier New, monospace, serif; + font-size: 0.92em; + color: #d400ff; +} + +code:before, +code:after { + content: '`'; +} + +hr { + border: none; + border-bottom: 1px solid #efefef; + margin: 6em auto; +} diff --git a/examples/z-experimental-refresh/next.config.js b/examples/z-experimental-refresh/next.config.js new file mode 100644 index 0000000000000..7258b1fdf1924 --- /dev/null +++ b/examples/z-experimental-refresh/next.config.js @@ -0,0 +1,5 @@ +module.exports = { + experimental: { + reactRefresh: true, + }, +} diff --git a/examples/z-experimental-refresh/package.json b/examples/z-experimental-refresh/package.json new file mode 100644 index 0000000000000..97e0becd5a630 --- /dev/null +++ b/examples/z-experimental-refresh/package.json @@ -0,0 +1,15 @@ +{ + "name": "z-experimental-refresh", + "version": "1.0.0", + "scripts": { + "dev": "next", + "build": "next build", + "start": "next start" + }, + "dependencies": { + "next": "canary", + "react": "^16.9.0", + "react-dom": "^16.9.0" + }, + "license": "MIT" +} diff --git a/examples/z-experimental-refresh/pages/_app.js b/examples/z-experimental-refresh/pages/_app.js new file mode 100644 index 0000000000000..d305f97bab7f1 --- /dev/null +++ b/examples/z-experimental-refresh/pages/_app.js @@ -0,0 +1,5 @@ +import '../global.css' + +export default function MyApp({ Component, pageProps }) { + return +} diff --git a/examples/z-experimental-refresh/pages/index.js b/examples/z-experimental-refresh/pages/index.js new file mode 100644 index 0000000000000..b912be8b631ec --- /dev/null +++ b/examples/z-experimental-refresh/pages/index.js @@ -0,0 +1,35 @@ +import { useCallback, useEffect, useState } from 'react' +import ClickCount from '../components/ClickCount' + +function Home() { + const [count, setCount] = useState(0) + const increment = useCallback(() => { + setCount(v => v + 1) + }, [setCount]) + + useEffect(() => { + const r = setInterval(() => { + increment() + }, 250) + return () => { + clearInterval(r) + } + }, [increment]) + + return ( +
+

Home

+
+

Auto Incrementing Value

+

Current value: {count}

+
+
+
+

Component with State

+ +
+
+ ) +} + +export default Home