From 0cf799f5b7d8cbc37910c794239744d3c27dcbcf Mon Sep 17 00:00:00 2001
From: Jean-Christophe <>
Date: Wed, 10 Jan 2024 14:18:29 +0100
Subject: [PATCH] =?UTF-8?q?premiers=20composants=20sans=20=C3=A9tat?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.md                 |  4 +++-
 src/components/first.jsx  | 12 ++++++++++++
 src/components/second.jsx | 16 ++++++++++++++++
 src/scripts/main.js       | 16 ++++++----------
 4 files changed, 37 insertions(+), 11 deletions(-)
 create mode 100644 src/components/first.jsx
 create mode 100644 src/components/second.jsx

diff --git a/README.md b/README.md
index 6be654c..6f3fb64 100644
--- a/README.md
+++ b/README.md
@@ -28,6 +28,8 @@ où `tag` peut prendre comme valeur :
    voir `/src/scripts/main.js` et le point d'insertion `#insertReactHere` dans `/src/index.html`
 * `v0.5` : second exemple avec création d'un emboitement d'éléments  
 * `v1` : premier exemple avec la syntaxe JSX  
-
+* `v2` : premiers composants sans état
+  voir `/src/components/first.jsx`, `/src/components/second.jsx` et son utilisation dans `/src/mains.js`
+  
 Faire ```git checkout main``` pour revenir à la version finale.
 
diff --git a/src/components/first.jsx b/src/components/first.jsx
new file mode 100644
index 0000000..55de97f
--- /dev/null
+++ b/src/components/first.jsx
@@ -0,0 +1,12 @@
+
+/*
+* define a stateless React component 
+*/
+const First =
+          () => <article>
+                  <h3>React <strong>First component</strong> in action, using JSX</h3>
+                  <div>this div is defined by the <code>First</code> component, in an article element defined as the root of the component</div>
+                </article>;
+
+
+export default First;
diff --git a/src/components/second.jsx b/src/components/second.jsx
new file mode 100644
index 0000000..af13c02
--- /dev/null
+++ b/src/components/second.jsx
@@ -0,0 +1,16 @@
+
+// import some other component
+import First from './first.jsx';
+
+/* define a stateless React component 
+ * It uses another defined component, here First.
+ */
+const Second =
+   () =>
+      <div>
+         <h3>Second React component that uses another React component</h3>
+         <p>below comes a <code>First</code> component : </p>
+         <First />                                            
+      </div>
+
+export default Second;
diff --git a/src/scripts/main.js b/src/scripts/main.js
index f831431..5dcea15 100644
--- a/src/scripts/main.js
+++ b/src/scripts/main.js
@@ -1,16 +1,12 @@
-import React from 'react'; 
 import { createRoot } from 'react-dom/client';
 
-const bootstrapReact = () => {
-      const root = createRoot(document.getElementById('insertReactHere'));  // DOM existing parent for created element = "insertion point"
+// import component
+import Second from '../components/second.jsx';
 
-   const article = <article>
-      <h3>Elements created by React, using jsx</h3>
-      <div>this div, created by React, is in an article</div>
-      <div>this div, created by React,  is in the same article</div>
-   </article>;
+const bootstrapReact = () => {
+   const root = createRoot(document.getElementById('insertReactHere'));  // parent for created element = "insertion point"
 
-   root.render(article);
-   }
+   root.render(<Second />);             // use defined imported component
+}
 
 window.addEventListener('DOMContentLoaded', bootstrapReact);
-- 
GitLab