Skip to content

Commit eb011bc

Browse files
Add lazy-loading demo to webpack sample
1 parent df85858 commit eb011bc

File tree

6 files changed

+246
-3
lines changed

6 files changed

+246
-3
lines changed

src/React.Sample.Webpack.CoreMvc/.babelrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"presets": ["@babel/preset-react", "@babel/preset-env"],
33
"plugins": [
44
"@babel/proposal-object-rest-spread",
5+
"@babel/plugin-syntax-dynamic-import",
56
"@babel/proposal-class-properties"
67
]
78
}

src/React.Sample.Webpack.CoreMvc/Content/components/home.jsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { CommentsBox } from './comments/Sample.jsx';
1313
import { StyledComponentsDemo } from './styled-components.jsx';
1414
import { EmotionDemo } from './emotion.jsx';
1515
import { ReactJssDemo } from './react-jss.jsx';
16+
import { LazyLoadDemo } from './lazy-load.jsx';
1617

1718
class Navbar extends Component {
1819
render() {
@@ -33,6 +34,9 @@ class Navbar extends Component {
3334
<li>
3435
<Link to="/emotion">Emotion Demo</Link>
3536
</li>
37+
<li>
38+
<Link to="/lazy-load">Lazy loading demo</Link>
39+
</li>
3640
</ul>
3741
);
3842
}
@@ -52,6 +56,9 @@ class HomePage extends Component {
5256
}
5357

5458
export default class HomeComponent extends Component {
59+
componentDidMount() {
60+
import('react-select').then(x => this.setState({ x }));
61+
}
5562
render() {
5663
const app = (
5764
<div className="container">
@@ -81,6 +88,7 @@ export default class HomeComponent extends Component {
8188
/>
8289
<Route path="/react-jss" component={ReactJssDemo} />
8390
<Route path="/emotion" component={EmotionDemo} />
91+
<Route path="/lazy-load" component={LazyLoadDemo} />
8492
<Route
8593
path="*"
8694
component={({ staticContext }) => {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import React, { Fragment, useState, useEffect } from 'react';
2+
import { Helmet } from 'react-helmet';
3+
4+
export function LazyLoadDemo() {
5+
const [lazySelect, setLazySelect] = useState();
6+
const [framework, setFramework] = useState();
7+
useEffect(() => {
8+
import('react-select').then(component => {
9+
setLazySelect({ Component: component.default });
10+
});
11+
}, []);
12+
return (
13+
<Fragment>
14+
<Helmet>
15+
<title>ReactJS.NET Demos | Lazy loading</title>
16+
</Helmet>
17+
{lazySelect && lazySelect.Component ? (
18+
<lazySelect.Component
19+
defaultValue={'React'}
20+
isMulti
21+
options={['React', 'Vue', 'Svelte', 'Ember', 'Angular'].map(x => ({ value: x, label: x }))}
22+
className="basic-multi-select"
23+
classNamePrefix="select"
24+
onChange={setFramework}
25+
/>
26+
) : 'Loading'}
27+
<div>{framework ? 'Pick a framework' : null}</div>
28+
</Fragment>
29+
);
30+
}

src/React.Sample.Webpack.CoreMvc/package-lock.json

Lines changed: 203 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/React.Sample.Webpack.CoreMvc/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@
1515
"react-helmet": "^5.2.0",
1616
"react-jss": "^8.6.1",
1717
"react-router-dom": "^5.0.0",
18+
"react-select": "^3.0.4",
1819
"reactstrap": "^8.0.0",
1920
"styled-components": "^4.0.0"
2021
},
2122
"devDependencies": {
2223
"@babel/core": "7.4.5",
2324
"@babel/plugin-proposal-class-properties": "7.4.4",
2425
"@babel/plugin-proposal-object-rest-spread": "7.4.4",
26+
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
2527
"@babel/preset-env": "7.4.5",
2628
"@babel/preset-react": "7.0.0",
2729
"babel-loader": "8.0.5",

src/React.Sample.Webpack.CoreMvc/webpack.config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ module.exports = {
88
filename: '[name].js',
99
globalObject: 'this',
1010
path: path.resolve(__dirname, 'wwwroot/dist'),
11+
publicPath: 'dist/'
1112
},
1213
mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',
1314
optimization: {
@@ -17,7 +18,7 @@ module.exports = {
1718
splitChunks: {
1819
cacheGroups: {
1920
commons: {
20-
test: /[\\/]node_modules[\\/]/,
21+
test: /[\\/]node_modules[\\/](react|react-dom)[\\/]/,
2122
name: 'vendor',
2223
chunks: 'all',
2324
},

0 commit comments

Comments
 (0)