@@ -40,7 +40,118 @@ updated styles still requires a page refresh.
40
40
41
41
See :doc: `/frontend/encore/dev-server ` for more details.
42
42
43
+ JSX Support
44
+ -----------
45
+
46
+ You can enable `JSX with Vue.js `_ by configuring the 2nd parameter of the ``.enableVueLoader() `` method:
47
+
48
+ .. code-block :: diff
49
+
50
+ // webpack.config.js
51
+ // ...
52
+
53
+ Encore
54
+ // ...
55
+ .addEntry('main', './assets/main.js')
56
+
57
+ - .enableVueLoader()
58
+ + .enableVueLoader(() => {}, {
59
+ + useJsx: true
60
+ + })
61
+ ;
62
+
63
+ Next, run or restart Encore. When you do, you will see an error message helping you
64
+ install any missing dependencies. After running that command and restarting
65
+ Encore, you're done!
66
+
67
+ Your ``.jsx `` files will now be transformed through ``@vue/babel-preset-jsx ``.
68
+
69
+ Using styles
70
+ ~~~~~~~~~~~~
71
+
72
+ You can't use ``<style> `` in ``.jsx `` files.
73
+ As a workaround, you can import ``.css ``, ``.scss ``, etc, files manually:
74
+
75
+ .. code-block :: javascript
76
+
77
+ // App.jsx
78
+
79
+ import ' ./App.css'
80
+
81
+ export default {
82
+ name: ' App' ,
83
+ render () {
84
+ return (
85
+ < div>
86
+ ...
87
+ < / div>
88
+ )
89
+ }
90
+ }
91
+
92
+ .. note ::
93
+
94
+ Importing styles this way make them global.
95
+ See the next section for scoping them to your component.
96
+
97
+ Using Scoped Styles
98
+ ~~~~~~~~~~~~~~~~~~~
99
+
100
+ You also can't use `Scoped Styles `_ (``<style scoped> ``) in ``.jsx `` files.
101
+ As a workaround, you can use `CSS Modules `_ by suffixing import paths with ``?module ``:
102
+
103
+ .. code-block :: javascript
104
+
105
+ // Component.jsx
106
+
107
+ import styles from ' ./Component.css?module' // suffix with "?module"
108
+
109
+ export default {
110
+ name: ' Component' ,
111
+ render () {
112
+ return (
113
+ < div>
114
+ < h1 class = {styles .title }>
115
+ Hello World
116
+ < / h1>
117
+ < / div>
118
+ )
119
+ }
120
+ }
121
+
122
+ .. code-block :: css
123
+
124
+ /* Component.css */
125
+
126
+ .title {
127
+ color : red
128
+ }
129
+
130
+ The output will be something like ``<h1 class="h1_a3dKp">Hello World</h1> ``.
131
+
132
+ Using images
133
+ ~~~~~~~~~~~~
134
+
135
+ You can't use ``<img src="./image.png"> `` in ``.jsx `` files.
136
+ As a workaround, you can import them with ``require() `` function:
137
+
138
+ .. code-block :: javascript
139
+
140
+ export default {
141
+ name: ' Component' ,
142
+ render () {
143
+ return (
144
+ < div>
145
+ < img src= {require (" ./image.png" )} / >
146
+ < / div>
147
+ )
148
+ }
149
+ }
150
+
43
151
.. _`babel-preset-react` : https://babeljs.io/docs/plugins/preset-react/
44
152
.. _`Vue.js` : https://vuejs.org/
45
153
.. _`vue-loader options` : https://vue-loader.vuejs.org/options.html
46
154
.. _`Encore's index.js file` : https://github.com/symfony/webpack-encore/blob/master/index.js
155
+ .. _`JSX with Vue.js` : https://github.com/vuejs/jsx
156
+ .. _`Scoped Styles` : https://vue-loader.vuejs.org/guide/scoped-css.html
157
+ .. _`CSS Modules` : https://github.com/css-modules/css-modules
0 commit comments