From 5fe1dbe967b70b85ddb869f4a2f03b9262c02123 Mon Sep 17 00:00:00 2001 From: Jean-Christophe <> Date: Wed, 10 Jan 2024 14:34:24 +0100 Subject: [PATCH] utilisation de props --- README.md | 4 +++- src/components/person.jsx | 16 ++++++++++++++++ src/components/personListing.jsx | 16 ++++++++++++++++ src/data/personsData.js | 14 ++++++++++++++ src/scripts/main.js | 10 +++++++--- src/style/person.css | 15 +++++++++++++++ 6 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 src/components/person.jsx create mode 100644 src/components/personListing.jsx create mode 100644 src/data/personsData.js create mode 100644 src/style/person.css diff --git a/README.md b/README.md index 6f3fb64..3e9890d 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,8 @@ où `tag` peut prendre comme valeur : * `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` - +* `v3` : utilisation des propriétés + voir `/src/components/person.jsx`, `/src/components/personListing.jsx` et son utilisation dans `/src/mains.js` + Faire ```git checkout main``` pour revenir à la version finale. diff --git a/src/components/person.jsx b/src/components/person.jsx new file mode 100644 index 0000000..fe29ea4 --- /dev/null +++ b/src/components/person.jsx @@ -0,0 +1,16 @@ +import React from 'react'; + +// import stysheet defining style specific to this component +import '../style/person.css'; + +/* +* define a component that uses props, props is a javascript object +* reminder : in jsx, code inside {} is javascript interpreted code +*/ +const Person = + props => <div className="person">Here is : + <div>name : <span>{ props.name }</span> </div> + <div>age : <span>{ props.age }</span> </div> + </div> + +export default Person; diff --git a/src/components/personListing.jsx b/src/components/personListing.jsx new file mode 100644 index 0000000..4730fde --- /dev/null +++ b/src/components/personListing.jsx @@ -0,0 +1,16 @@ +import React from 'react'; + +import Person from './person.jsx'; + +/* +* props.persons is an Array, here we assume with at least two elements +* note, in second use of Person, the use of spread operator "..." on object to alleviate the syntax, possible when object field names correspond to props name +*/ +const PersonListing = + props => <div> + Listing : + <Person name={props.persons[0].name} age={props.persons[0].age} /> + <Person {...props.persons[1]} /> + </div> + +export default PersonListing; diff --git a/src/data/personsData.js b/src/data/personsData.js new file mode 100644 index 0000000..9ba76f5 --- /dev/null +++ b/src/data/personsData.js @@ -0,0 +1,14 @@ +const persons = [ + { + id: 'A001', + name: "Timoleon", + age: 12 + }, + { + id: 'A002', + name: "Bilbo Baggins", + age: 111 + } +]; + +export default persons; diff --git a/src/scripts/main.js b/src/scripts/main.js index 5dcea15..bc4e060 100644 --- a/src/scripts/main.js +++ b/src/scripts/main.js @@ -1,12 +1,16 @@ import { createRoot } from 'react-dom/client'; -// import component -import Second from '../components/second.jsx'; +// import data, simulate data retrieval from database, *personsData* is an Array object +import personsData from '../data/personsData.js'; + +// import React component +import PersonListing from '../components/personListing.jsx'; const bootstrapReact = () => { const root = createRoot(document.getElementById('insertReactHere')); // parent for created element = "insertion point" - root.render(<Second />); // use defined imported component + root.render(<PersonListing persons={ personsData } />); // use defined imported component } + window.addEventListener('DOMContentLoaded', bootstrapReact); diff --git a/src/style/person.css b/src/style/person.css new file mode 100644 index 0000000..07e3a9b --- /dev/null +++ b/src/style/person.css @@ -0,0 +1,15 @@ +div.person { + padding: 4px 8px; + margin: 10px; + background-color: rgba(128, 128, 255, 0.7); + color: white; + font-size: medium; +} + +div.person>div { + margin: 3px 15px; +} + +div.person span { + color: black; +} \ No newline at end of file -- GitLab