import{useState}from'react';letinitialShapes=[{id:0,type:'circle',x:50,y:100},{id:1,type:'square',x:150,y:100},{id:2,type:'circle',x:250,y:100},];exportdefaultfunctionShapeEditor(){const[shapes,setShapes]=useState(initialShapes);functionhandleClick(){constnextShapes=shapes.map(shape=>{if(shape.type==='square'){// No changereturnshape;}else{// Return a new circle 50px belowreturn{...shape,y:shape.y+50,};}});// Re-render with the new arraysetShapes(nextShapes);}return(<><buttononClick={handleClick}>Movecirclesdown!</button>{shapes.map(shape=>(<divkey={shape.id}style={{background:'purple',position:'absolute',left:shape.x,top:shape.y,borderRadius:shape.type==='circle'?'50%':'',width:20,height:20,}}/>))}</>);}
import{useState}from'react';letinitialCounters=[0,0,0];exportdefaultfunctionCounterList(){const[counters,setCounters]=useState(initialCounters);functionhandleIncrementClick(index){constnextCounters=counters.map((c,i)=>{if(i===index){// Increment the clicked counterreturnc+1;}else{// The rest haven't changedreturnc;}});setCounters(nextCounters);}return(<ul>{counters.map((counter,i)=>(<likey={i}>{counter}<buttononClick={()=>{handleIncrementClick(i);}}>+1</button></li>))}</ul>);}
import{useState}from'react';letnextId=3;constinitialArtists=[{id:0,name:'Marta Colvin Andrade'},{id:1,name:'Lamidi Olonade Fakeye'},{id:2,name:'Louise Nevelson'},];exportdefaultfunctionList(){const[name,setName]=useState('');const[artists,setArtists]=useState(initialArtists);functionhandleClick(){constinsertAt=1;// Could be any indexconstnextArtists=[// Items before the insertion point:...artists.slice(0,insertAt),// New item:{id:nextId++,name:name},// Items after the insertion point:...artists.slice(insertAt)];setArtists(nextArtists);setName('');}return(<><h1>Inspiringsculptors:</h1><inputvalue={name}onChange={e=>setName(e.target.value)}/><buttononClick={handleClick}>Insert</button><ul>{artists.map(artist=>(<likey={artist.id}>{artist.name}</li>))}</ul></>);}
setMyList(myList.map(artwork=>{if(artwork.id===artworkId){// Create a *new* object with changesreturn{...artwork,seen:nextSeen};}else{// No changesreturnartwork;}}));
import{useState}from'react';letnextId=3;constinitialList=[{id:0,title:'Big Bellies',seen:false},{id:1,title:'Lunar Landscape',seen:false},{id:2,title:'Terracotta Army',seen:true},];exportdefaultfunctionBucketList(){const[myList,setMyList]=useState(initialList);const[yourList,setYourList]=useState(initialList);functionhandleToggleMyList(artworkId,nextSeen){setMyList(myList.map(artwork=>{if(artwork.id===artworkId){// Create a *new* object with changesreturn{...artwork,seen:nextSeen};}else{// No changesreturnartwork;}}));}functionhandleToggleYourList(artworkId,nextSeen){setYourList(yourList.map(artwork=>{if(artwork.id===artworkId){// Create a *new* object with changesreturn{...artwork,seen:nextSeen};}else{// No changesreturnartwork;}}));}return(<><h1>ArtBucketList</h1><h2>Mylistofarttosee:</h2><ItemListartworks={myList}onToggle={handleToggleMyList}/><h2>Yourlistofarttosee:</h2><ItemListartworks={yourList}onToggle={handleToggleYourList}/></>);}functionItemList({artworks,onToggle}){return(<ul>{artworks.map(artwork=>(<likey={artwork.id}><label><inputtype="checkbox"checked={artwork.seen}onChange={e=>{onToggle(artwork.id,e.target.checked);}}/>{artwork.title}</label></li>))}</ul>);}