-
Notifications
You must be signed in to change notification settings - Fork 0
/
App.js
300 lines (262 loc) · 10.1 KB
/
App.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
/**
* Parcel functionalities.
* HMR - Hot module reloading (it will refresh the page automatically).
* File water algorithm (based on File water algorithm Hot module reloading is happening).
* Building.
* Minifying.
* Dev and production build.
* Super fast build algorithm.
* Image optimization.
* Caching while development.
* compression.
* rewriting.
* compatable with older version of browsers.
* https on dev also. (npx parcel index.html --https)
* it will assign the port.
* Consist of hasing algorithm.
* Zero config
* Tree shaking (Removing unwanted code) (It will remove unused functions of the installed packages).
*/
/**
* Transitive dependencies(each package has it own dependencies).
*
* polyfill means converting the newer version of code to old code. (bable will do the functionality)
* If we mentioned the browsers list, then bable will do the polyfill, means it will convert the new version of code to old code.
* We don't need to write the polyfill, bable will take care of it.
* Bable will clearing the console log.
*/
import React, { Component } from "react";
import ReactDOM from "react-dom/client";
// if we import createElement from react we can directly call that function or by using alias also.
// import {createElement} from "react";
// const header1 = createElement("h1", { id:"header1", key:"h1"}, "Welcome to React app from parcel");
// or
// import {createElement as ce } from "react";
// const header1 = ce("h1", { id:"header1", key:"h1"}, "Welcome to React app from parcel");
// creat a react element
const header1 = React.createElement("h1", { id:"header1", key:"h1"}, "Welcome to React app from parcel");
// React.createElement ==> javascript object => html (DOM)
const header2 = React.createElement("h2", { id:"header2", key:"h2"}, "Welcome to React app2");
// we can keep all chiledren elements inside the array
const container = React.createElement("div", { id:"container"}, [header1, header2]);
const root = ReactDOM.createRoot(document.getElementById("root"));
// passing the react element into root
// root.render(header1);
// passing the react container element into root
// render will modify the dom
// root.render(container);
// creating a nested html using react.
const parent = React.createElement(
"div", // element name
{id:"parent"}, // properties
React.createElement(
"div", // element name
{id:"child"}, // properties
React.createElement(
"h1", // element name
{}, // properties
"its h1 tag" // children
)
)
);
// rendering the nested html using reactdom.
// const root = ReactDOM.createRoot(document.getElementById("root"));
// root.render(parent);
// creating a nested html using react.
const parentwithsiblings = React.createElement(
"div", // element name
{id:"parent"}, // properties
React.createElement(
"div", // element name
{id:"child"}, // properties
[
React.createElement(
"h1", // element name
{}, // properties
"its h1 tag" // children
),
React.createElement(
"h2", // element name
{}, // properties
"its h2 tag" // children
)
]
)
);
// const root = ReactDOM.createRoot(document.getElementById("root"));
// root.render(parentwithsiblings);
const parentwithchildsiblings = React.createElement(
"div", // element name
{id:"parent"}, // properties
[
React.createElement(
"div", // element name
{id:"child1"}, // properties
[
React.createElement(
"h1", // element name
{}, // properties
"its h1 tag" // children
),
React.createElement(
"h2", // element name
{}, // properties
"its h2 tag" // children
)
]
),
React.createElement(
"div", // element name
{id:"child2"}, // properties
[
React.createElement(
"h1", // element name
{}, // properties
"its h1 tag" // children
),
React.createElement(
"h2", // element name
{}, // properties
"its h2 tag" // children
)
]
)
]
);
// const root = ReactDOM.createRoot(document.getElementById("root"));
// root.render(parentwithchildsiblings);
// creating the elements using jsx.
// jsx means javascript xml
// jsx is html like syntax
// single line jsx
const header = <h1 id="header1" key="header1key">header one</h1>;
// mutiple line jsx
// it's a react element
const header3 = (
<h1 id="header3" key="header3key">
react element or jsx
</h1>
);
// jsx => react.createElement => object => html (dom)
// Bable will convert jsx to react.createElement then object then html (dom)
// example for rendering the react element.
// root.render(header3);
// React Component (everything is a component in react)
// 1. Functional Component.
// 2. Class Component.
// Functional component is normal java script function.
// functional component name starts with capital letter.(not mandatory but its good practice).
// single line Component.
const HeaderComponent = () => {
return <h1>functional component</h1>;
}
// Multi line Component.
const HeaderComponents = () => {
return (
<div>
<h1>functional component</h1>
<h1>functional component</h1>
</div>
);
}
// component with out return statement.
const HeaderComponent2 = () =>
(
<div>
<h1>functional component</h1>
<h1>functional component</h1>
</div>
);
// component with function.
const HeaderComponent3 = function () {
return (
<div>
{header3}
{/* we can write any javascript code
*
*
* is jsx mandatory ? no
* is typescript mandatory ? no
* is es6 mandatory ? no
*
*/}
<h1>This is React functional component</h1>
<h1>This is h1 tag</h1>
<HeaderComponent2 />{/* this is know as component composition */}
</div>
);
}
//here {header3} inserting the react element into a react component.
// here <HeaderComponent2 /> inserting a react functional component into another functional component.
// <HeaderComponent2 /> or {HeaderComponent2()} both are same.
// example of rendering the react componet.
// inserting a component inside another component is called as component coposition.
// root.render(<HeaderComponent3 />)
const Title = () => {
return (
<a href="/"><img alt="image" className="logo" src="https://com-mt-production-ap-south-1-assets.s3.ap-south-1.amazonaws.com/53660/0216ee4e-6e51-423b-bc88-ca95af378a97.jpeg?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIARNLZC3JYWGS5WCXC%2F20240309%2Fap-south-1%2Fs3%2Faws4_request&X-Amz-Date=20240309T122010Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=28ba51e632ccb471aa7f697b6f81ae9ccd4594803cd0bd81bfde0d179f60ac42"></img></a>
);
}
const Header = () => {
return (
<div className="header">
<Title></Title>
<div className="navitems">
<ul>
<li>Home</li>
<li>About</li>
<li>Home</li>
<li>Cart</li>
</ul>
</div>
</div>
);
}
const Body = () => {
return (
<h1>body</h1>
);
}
const Footer = () => {
return (
<h1>footer</h1>
);
}
// jsx expressions must have one parent element.
// const jsx = <h1>heading one</h1><h2>heading two</h2> this is WRONG because jsx expression should have one parent element.
// const jsx = <div><h1>heading one</h1><h2>heading two</h2></div> this is CORRECT because all child tags are wrapped into one parent tag.
// Example: adding the empty <div></div> as a parent tag for the component.
// const styleObj = {
// "background-color": "red",
// };
// const AppLayout = () => {
// return (
// <div style={styleObj}> // inline style in react.
// <Header />
// <Body />
// <Footer />
// </div>
// );
// }
// React.Fragment is a component exported by the react.
// so we can replace the empty <div></div> with <React.Fragment></React.Fragment>.
// const AppLayout = () => {
// return (
// <React.Fragment>
// <Header />
// <Body />
// <Footer />
// </React.Fragment>
// );
// }
// <React.Fragment></React.Fragment> is equal to <></>
const AppLayout = () => {
return (
<>
<Header />
<Body />
<Footer />
</>
);
}
root.render(<AppLayout />);